18

私はjsoupを使用していくつかのHTMLデータをスクレイプしていますが、うまく機能しています。次に、いくつかのJSONコンテンツをプルする必要があります(HTMLではなくJSONのみ)。jsoupを使用してこれを簡単に行うことはできますか、それとも別の方法を使用して行う必要がありますか?jsoupが実行する解析は、JSONデータをエンコードしているため、Gsonでは正しく解析されません。

4

6 に答える 6

23

Jsoupは優れていますが、JSON パーサーではなく HTML パーサーであるため、このコンテキストでは役に立ちません。これを試みると、Jsoup は返された JSON を暗黙的に a<html><head>などに配置します。あなたはそれをしたくありません。 Gsonは JSON パーサーなので、必ず必要になります。

あなたの具体的な問題は、JSON を返す URL を Gson にフィードする方法がわからない可能性があります。その場合、 を使用URL#openStream()して を取得し、InputStreamを使用して最終的に供給できるInputStreamReaderに装飾する必要があります。ReaderGson#fromJson()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);
// ...
于 2011-06-14T19:18:08.047 に答える
4

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();
于 2013-05-25T16:51:23.133 に答える
0

私は多くの回答を見てきましたが、ページに相当するコードを書いている人がいますが、その理由はわかりませんが、GSON を使用すると簡単に行うことができます。

/**
 * 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();
}
于 2016-07-26T09:54:05.323 に答える
0

jsoup についてはわかりませんが、それが有効な JSON であれば、Gson はデコードできるはずです (カスタム クラスにカスタム デシリアライザーが必要になる場合があります)。

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

于 2011-06-14T19:07:53.720 に答える