2012-07-01 22 views
5

Json kullanarak ayrıştırmak istediğim bir json için bir eşleme oluşturmada sorun yaşıyorum. Bu çok özel, onun içindeki nesneleri ile bir json dizi ile bir json dosyası hakkında.json dosyası ile ayrıştırma gson

benim jsonfile böyle başlıyor:

[ 
    { 
     "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 

Yani ilk bir dizi, içindeki nesnelerin bir sürü bir nesne (mekan) den (i çoğu kaldırılmış, çünkü thats benim soru için önemli değildir) ve bazı diziler (season_openings gibi).

Ayrıştırma kodum böyle çalışmaktadır, gson kullanıyorum. Giriş akışı iyi çalışıyor.

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

ve 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 
} 

Ama bu kodu çalıştırdığınızda i bir hata alıyorum: Tabii

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 

sınıf JsonResponse ile

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

hatayı okuyabiliyorum: Bjects ama bir dizi olsun. Farklı jsonresponse.class ile çok çeşitli ve json dizisi bir json nesnesine koyarak bile (gerçekten bir çözüm değil çünkü bu tür bir jsonfile ile çalışmam gerekiyor). Ama bunu her an ya da benzer bir hatayı alıyorum.

Sanırım bir çözüme yakınım, kimse neyi yapamayacağımı ve bana yardım eli bulabildiğini görebiliyor mu? Teşekkürler. Böyle GSON çağıran

+0

Geçersiz örnek JSON ve tamamlanmamış geçersiz örnek Java koduyla, yardım etmeye çalışabilecek kişiler gerçekten neler olup bittiğini tahmin etmekten uzak kalır. Çözülmeye çalışılmakta olan sorunu gösteren minimal örneklerin tümünü göndermek iyi bir uygulamadır. –

cevap

4

Dene: JSON belge List değil, onun özelliklerinden biri olarak bir listesi vardır bir nesne olduğu için

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

Bu çalışır.

+0

Teşekkürler, işe yaradı! – Jasper

+0

Denedim: Dize adı = venues.get (12) .getName; Log.i (venuetag, "mekan 12 adı:" + isim); ama isim için boş bir değer verir. Bunu doğru mu yapıyorum? Ben venues.size() kullandım ve 471 döndü, bu yüzden benim listenin işe yaradığından emin olun .... – Jasper

+0

@Jasper, JS veri yapısı ve Gson ile yeterince uyumlu olmayan Java veri yapısının serileştirildiğini tahmin ediyorum bu nedenle JSON "isim" elemanını Java "isim" alanına bağlamaz. –