Lire le contenu de JSON
j'utilise jsoup pour gratter des données HTML et ça marche très bien. Maintenant j'ai besoin de tirer du contenu JSON (seulement JSON, pas HTML). Puis-je faire cela facilement avec jsoup ou dois-je le faire en utilisant une autre méthode? L'analyse que jsoup effectue encode les données JSON de sorte qu'elle ne s'analyse pas correctement avec Gson.
Merci!
5 réponses
Tandis que la grande, Jsoup est un analyseur HTML, pas un parser JSON, donc il est inutile dans ce contexte. Si vous tentez de le faire, Jsoup mettra implicitement le JSON retourné dans un <html><head>
et ainsi de suite. Vous ne voulez pas que. Gson est un parser JSON, alors vous avez certainement besoin.
votre problème concret est probablement que vous ne savez pas comment alimenter une URL retournant un JSON à Gson. Dans ce cas, vous devez utiliser URL#openStream()
pour obtenir un InputStream
et utiliser InputStreamReader
pour le décorer en un Reader
qui peut finalement être alimenté à Gson#fromJson()
qui accepte un 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 n'est pas conçu pour l'analyse JSON. Utilisez Gson (ou toute autre bibliothèque java JSON). Pour obtenir du contenu à distance avec Jsoup, utilisez ceci:
Connection con = HttpConnection.connect(url);
con.method(Method.POST).data(data.params).ignoreContentType(true);
Response resp = con.execute();
String body = resp.body();
Je ne sais pas à propos de jsoup, mais si C'est JSON valide, alors Gson devrait être capable de décoder (peut-être besoin de quelques désérialiseurs personnalisés pour vos classes personnalisées).
si ce N'est pas JSON valide et que vous avez des erreurs, alors il y a un bug dans jsoup.
j'ai vu beaucoup de réponses et les gens écrivant des pages de code, je n'ai aucune idée pourquoi, mais vous pouvez le faire facilement avec 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 ne parse pas JSON, mais il peut être utilisé pour récupérer des données JSON facilement.
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);
}
}
l'exemple lit les données de JSON de http://time.jsontest.com
avec JSoup
et parses JSON avec Gson. Pour exécuter cet exemple, vous avez besoin de Jsoup
et les dépendances Gson.