2010-01-09 13 views
7

Ich würde gerne wissen, wie man einen JSON-Feed nach Elementen zu analysieren (zB. URL/Titel/Beschreibung für jedes Element). Ich habe mir die doc/api angesehen, aber es hat mir nicht geholfen.Parsing Json Feeds mit Google Gson

Dies ist, was ich

import com.google.gson.Gson; 
import com.google.gson.JsonObject; 

public class ImportSources extends Job { 
    public void doJob() throws IOException { 
     String json = stringOfUrl("http://feed.test/all.json"); 
     JsonObject jobj = new Gson().fromJson(json, JsonObject.class); 
     Logger.info(jobj.get("responseData").toString()); 
    } 
    public static String stringOfUrl(String addr) throws IOException { 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     URL url = new URL(addr); 
     IOUtils.copy(url.openStream(), output); 
     return output.toString(); 
    } 
} 

Antwort

9

Abhängig von der tatsächlichen JSON-Format so weit gekommen. Sie können tatsächlich eine benutzerdefinierte Javabean-Klasse erstellen, die dem JSON-Format entspricht. Alle Felder in JSON können als String, Integer, usw. Javabean-Eigenschaften zugeordnet werden. Beliebige Arrays können als List Eigenschaften zugeordnet werden. Alle Objekte können als weitere geschachtelte JavaBean-Eigenschaft zugeordnet werden. Es erleichtert erheblich die weitere Verarbeitung in Java.

Ohne ein JSON-String-Beispiel von Ihrer Seite, es ist nur raten, wie es aussehen würde, so kann ich hier kein grundlegendes Beispiel geben. Aber ich habe vor hier ähnliche Antworten geschrieben, können Sie es nützlich finden:

Gson hat auch eine User Guide, können Sie finden es auch nützlich.

+0

Vielen Dank für Ihre Antwort, ich habe versucht, die Beispiele der folgenden Futtermittel gelten: http://www.stocktwits.com/ Ströme/all.json. Ich habe es nicht geschafft, andere Werte als null zu bekommen. Muss ich zwei Gruppen erstellen: Stream und Tweets? – Roch

0

Ich weiß nicht, ob GSON Streaming/inkrementelle Bindung tun kann (ich dachte es nicht).

Aber gibt es einen bestimmten Grund, nur diese bestimmte Bibliothek zu betrachten? Andere Java-JSON-Verarbeitungsbibliotheken erlauben eine solche Verarbeitung (Sie können Links, die die andere Antwort für einige Ideen enthält, überprüfen, da dies bei der Verarbeitung großer Feeds sehr wichtig ist).

+0

Nun, ich habe ROME für RSS-Feeds verwendet, und das Framework, das ich verwende, enthält Gson, Deshalb versuche ich es zu benutzen, aber ich bin offen für jede andere Bibliothek. – Roch

+0

Ok. Wie ich schon sagte, ich denke, GSON macht nur vollständige Dokumentenbindung, aber ich bin nicht 100%. Für eine Alternative erlaubt Jackson (http://jackson.codehaus.org) inkrementelle Bindung, sowie mehrere andere Betriebsmodi. Der Weg, der funktioniert, ist, dass Sie einen JsonParser für die Hauptsache erhalten müssen, iterieren über Haupt-JSON-Array oder -Objekt und rufen Sie parser.readValueAs() für die tatsächliche Bindung auf. Benutzer-Mailing-Liste kann mit Details helfen, wenn die Dokumentation nicht genügend Zeiger hat. – StaxMan

3

Gson 1.4 verfügt über eine neue API JsonStreamParser, mit der Sie mehrere JSON-Objekte einzeln aus einem Stream analysieren können.