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!

14
demandé sur Chromag 2011-06-14 23:02:23

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);
// ...
21
répondu BalusC 2011-06-14 19:18:08

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();
3
répondu msangel 2013-05-25 16:51:23

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.

0
répondu Jason S 2011-06-14 19:07:53

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();
}
0
répondu Kareem 2016-07-27 04:17:58

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.

0
répondu Jan Bodnar 2017-05-30 14:53:18