2012-07-01 17 views
5

Mam problem z utworzeniem mapowania dla pliku json, który chcę przeanalizować, używając json. Jest bardzo specyficzny, dotyczy pliku json z tablicą json z obiektami.Parsowanie pliku json z gsonem

mój jsonfile zaczyna się tak:

[ 
    { 
     "venue": { 
      "venue_seasons": [ 
       { 
        "created_at": "2011-12-25T23:00:28Z", 
        "updated_at": "2011-12-28T15:13:53Z", 
        "start_timestamp": 1293840000, 
        "id": 337, 
        "end": "2011-12-24T00:00:00Z", 
        "enabled": true, 
        "start": "2011-01-01T00:00:00Z", 
        "season_openings": [ … ], 
        "end_timestamp": 1324684800 
       }, 
       { … } 
      ], 
      "address": "someadress", 
      "city": "cityname", 
      "name": "name", 
      "created_at": "2011-03-31T07:55:33Z", 
     etcetera 
    } 
    "venue":{another venue 

Więc najpierw tablicę, niż przedmiot (miejsce) z wielu przedmiotów w nim (i usuwa większość z nich, ponieważ to nie jest ważne dla mojego pytania) i niektóre tablice (jak np. season_openings).

Mój parsujący kod działa w ten sposób, używam gson. Wejście działa dobrze.

Reader reader = new InputStreamReader(inputStream); 
JsonResponse venueResponse = gson.fromJson(reader, JsonResponse.class);    
List<Venues> results = venueResponse.venue; 

z klasy JsonResponse:

public class JsonResponse { 
    public List<Venues> venue; 
} 

i Venues.class:

public class Venues { 

    public List<VenueSeasons> venue_seasons; 

    @SerializedName("adress") 
    public String getAdress; 

    @SerializedName("city") 
    public String getCity; 

    @SerializedName("country") 
    public String getCountry; etcetera 
} 

Ale gdy uruchamiam ten kod pojawia się błąd:

Unable to start activity ComponentInfo{com.hera.android.JSON/com.hera.android.JSON.TestParser2Activity}: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 

Ofcourse mogę odczytać błąd: oczekuje o bjects, ale otrzymasz tablicę. Różniłem się bardzo z różnymi jsonresponse.class, a nawet z umieszczaniem całej tablicy json w obiekcie json (co nie jest tak naprawdę rozwiązaniem, ponieważ potrzebuję pracować z tym typem pliku json). Ale za każdym razem otrzymuję ten lub podobny błąd.

Myślę, że jestem bliski rozwiązania, czy ktoś może zobaczyć, czego nie mogę i udzieli mi pomocy? Dzięki.

+0

Przy niepoprawnym przykładzie JSON i niekompletnym nieprawidłowym przykładowym kodzie Java osoby, które mogą spróbować pomóc, zgadują, co naprawdę się dzieje. Dobrą praktyką jest publikowanie pełnych, minimalnych przykładów, które demonstrują problem próbujący zostać rozwiązany. –

Odpowiedz

4

Spróbuj zadzwonić Gson tak:

List<Venues> venues = gson.fromJson(reader, new TypeToken<List<Venues>>() {}.getType()); 

To działa, ponieważ dokument jest List JSON, a nie obiekt, który ma listę jako jeden z jego właściwości.

+0

Dzięki, zadziałało! – Jasper

+0

Próbowałem: String name = venues.get (12) .getName; Log.i (venuetag, "nazwa miejsca 12 to:" + nazwa); ale nadaje nazwę wartość pustą. Czy robię to dobrze? Użyłem venues.size() i zwróciło 471, więc jestem pewien, że moja lista działa .... – Jasper

+0

@Jasper, zgaduję, że struktura danych Java jest deserialized do nie dość dobrze pasuje do struktury JSON i Gson w ten sposób nie wiąże elementu JSON "name" z polem "nazwa" Java. –