2010-01-09 13 views
7

Chciałbym wiedzieć, jak analizować kanał JSON według przedmiotów (np. Adres/tytuł/opis dla każdego elementu). Spojrzałem na dokument/api, ale to mi nie pomogło.Parsowanie Json Kanały z google Gson

To, co mam tak daleko

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(); 
    } 
} 

Odpowiedz

9

zależy od rzeczywistej formacie JSON. W rzeczywistości możesz po prostu utworzyć niestandardową klasę Javabean zgodną z formatem JSON. Dowolne pola w JSON mogą być mapowane jako właściwości Javabean jako String, Integer, Boolean. Wszystkie tablice można odwzorować jako właściwości List. Wszelkie obiekty można odwzorować jako inną zagnieżdżoną właściwość Javabean. Znacznie ułatwia dalsze przetwarzanie w Javie.

Bez przykładu łańcucha JSON z Twojej strony, to tylko zgadywanie, jak to będzie wyglądać, więc nie mogę podać tutaj podstawowego przykładu. Ale ja pisał podobne odpowiedzi, zanim tutaj, może okazać się przydatne:

Gson posiada również User Guide, może okazać się przydatny również.

+0

Dzięki za odpowiedź, próbowałem stosować przykłady z następującym paszy: http://www.stocktwits.com/ streams/all.json. Nie udało mi się uzyskać żadnych innych wartości niż zero. Czy muszę utworzyć dwie grupy: strumień i tweety? – Roch

0

Nie wiem, czy GSON może wykonywać strumieniowe/przyrostowe powiązanie (myślałem, że nie).

Ale czy istnieje szczególny powód, aby rozważać tylko tę konkretną bibliotekę? Inne biblioteki obsługujące Java JSON zezwalają na takie przetwarzanie (możesz sprawdzić linki, na które druga odpowiedź ma kilka pomysłów), ponieważ jest to dość ważna funkcja podczas przetwarzania dużych plików danych.

+0

Cóż, używałem ROME dla kanałów RSS, a framework, którego używam, zawiera gson, dlatego próbuję go użyć, ale jestem otwarty na każdą inną bibliotekę. – Roch

+0

Ok. Tak jak powiedziałem, myślę, że GSON ma tylko pełne powiązanie dokumentów, ale nie jestem w 100%. Dla alternatywy, Jackson (http://jackson.codehaus.org) pozwala na przyrostowe powiązanie, a także wiele innych trybów operacyjnych. Sposób działania polega na tym, że musisz uzyskać JsonParser dla głównej rzeczy, iterować nad główną tablicą JSON lub obiektem i wywołać parser.readValueAs() dla rzeczywistego wiązania. Lista mailingowa użytkowników może pomóc w szczegółach, jeśli dokumentacja nie zawiera wystarczającej liczby wskazówek. – StaxMan

3

Gson 1.4 ma nowy API JsonStreamParser, który umożliwia analizowanie wielu obiektów JSON pojedynczo ze strumienia.