私はjsoupを使用していくつかのHTMLデータをスクレイプしていますが、うまく機能しています。次に、いくつかのJSONコンテンツをプルする必要があります(HTMLではなくJSONのみ)。jsoupを使用してこれを簡単に行うことはできますか、それとも別の方法を使用して行う必要がありますか?jsoupが実行する解析は、JSONデータをエンコードしているため、Gsonでは正しく解析されません。
6 に答える
Jsoupは優れていますが、JSON パーサーではなく HTML パーサーであるため、このコンテキストでは役に立ちません。これを試みると、Jsoup は返された JSON を暗黙的に a<html><head>
などに配置します。あなたはそれをしたくありません。 Gsonは JSON パーサーなので、必ず必要になります。
あなたの具体的な問題は、JSON を返す URL を Gson にフィードする方法がわからない可能性があります。その場合、 を使用URL#openStream()
して を取得し、InputStream
を使用して最終的に供給できるInputStreamReader
に装飾する必要があります。Reader
Gson#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);
// ...
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();
私は多くの回答を見てきましたが、ページに相当するコードを書いている人がいますが、その理由はわかりませんが、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();
}
jsoup についてはわかりませんが、それが有効な JSON であれば、Gson はデコードできるはずです (カスタム クラスにカスタム デシリアライザーが必要になる場合があります)。
有効な JSON ではなく、エラーが発生する場合は、jsoup にバグがあります。