質問

私はJSOUPを使用していくつかのHTMLデータをこすります、そしてそれは素晴らしいです。今、私はいくつかのJSONコンテンツを引く必要があります(JSONのみ、HTMLではなく)。 JSOUPで簡単にこれを行うことはできますか、それとも別の方法を使用してそれを行う必要がありますか? JSOUPが実行する解析は、JSONデータをエンコードすることであるため、GSONで適切に解析されません。

ありがとう!

役に立ちましたか?

解決

素晴らしい間、 jsoup JSONパーサーではなくHTMLパーサーなので、このコンテキストでは役に立たない。あなたがそれを試みたなら、jsoupは返されたjsonを暗黙的にに置きます <html><head> 等々。あなたはそれを持ちたくありません。 GSON JSONパーサーなので、間違いなく必要です。

あなたの具体的な問題は、JSONをGSONに返すURLを供給する方法がわからない可能性が高いことです。その場合、使用する必要があります URL#openStream() を取得する InputStream それと使用 InputStreamReader それを飾る Reader 最終的に供給することができます Gson#fromJson() それはaを受け入れます Reader.

InputStream input = new URL("http://example.com/foo.json").openStream();
Reader reader = new InputStreamReader(input, "UTF-8");
Data data = new Gson().fromJson(reader, Data.class);
// ...

他のヒント

JSoupは、JSONを解析するために設計されていません。 GSON(または他のJava JSONライブラリ)を使用してください。 JSOUPでリモートコンテンツを取得するには、これを使用してください。

Connection  con = HttpConnection.connect(url);
con.method(Method.POST).data(data.params).ignoreContentType(true);
Response resp = con.execute();
String body = resp.body();

JSoupはJSONを解析しませんが、JSONデータを簡単に取得するために使用できます。

package com.zetcode;

import com.google.gson.Gson;
import java.io.IOException;
import org.jsoup.Jsoup;

class TimeData {

    private String time;
    private Long milliseconds_since_epoch;
    private String date;

    @Override
    public String toString() {
        return "TimeData{" + "time=" + time + ", milliseconds_since_epoch=" 
                + milliseconds_since_epoch + ", date=" + date + '}';
    }
}


public class GsonReadWebPage {

    public static void main(String[] args) throws IOException {

        String webPage = "http://time.jsontest.com";

        String data = Jsoup.connect(webPage).ignoreContentType(true).execute().body();

        Gson gson = new Gson();
        TimeData td = gson.fromJson(data, TimeData.class);

        System.out.println(td);
    }
}

この例には、JSONデータが表示されます http://time.jsontest.com jsoupとjsonとgsonを解析します。この例を実行するには、JSOUPとGSON依存関係が必要です。

JSOUPについては知りませんが、有効なJSONである場合、GSONはデコードできるはずです(カスタムクラスにはカスタムデリアライザーが必要になる場合があります)。

JSONが有効でない場合、エラーが発生している場合は、JSOUPにバグがあります。

私は多くの答えと人々がページの価値のあるコードを書いているのを見てきました、私は理由がわかりませんが、あなたはGSONでこれをEASに行うことができます。

/**
 * Convert json string to json object
 */
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

private JsonObject getResAsJson(String response) {
    return new JsonParser().parse(response).getAsJsonObject();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top