2012-07-01 4 views
5

У меня возникла проблема с созданием сопоставления для json, который я хочу проанализировать с помощью json. Это очень специфично, это о json-файле с массивом json с объектами в нем.Разбор json-файла с gson

мой jsonfile начинается так:

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

Так первый массив, чем объект (место) с большим количеством объектов в нем (я удалил большинство из них, потому что то не важно, на мой вопрос) , и некоторые массивы (например, season_openings).

Мой синтаксический код работает следующим образом: im использует gson. Входной поток работает нормально.

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

с классом JsonResponse:

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

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

Но когда я запускаю этот код я получаю сообщение об ошибке:

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 я могу прочитать ошибку: она ожидает o bjects, но получить массив. Я много варьировался с различным jsonresponse.class и даже с помещением всего json-массива в объект json (что на самом деле не является решением, потому что мне нужно работать с этим типом jsonfile). Но каждый раз я получаю эту или аналогичную ошибку.

Я думаю, что я близок к решению, может ли кто-нибудь увидеть то, что я просто не могу, и дать мне руку помощи? Спасибо.

+0

С недопустимым примером JSON и неполным недействительным примером Java-кода люди, которые могут попытаться помочь, оставляют догадки о том, что происходит на самом деле. Хорошей практикой является публикация полных минимальных примеров, демонстрирующих проблему, которую нужно решить. –

ответ

4

Try вызова Gson как это:

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

Это работает, потому что ваш JSON документ является List, а не объект, который содержит список в качестве одного из его свойств.

+0

Спасибо, это сработало! – Jasper

+0

Я попытался: String name = venues.get (12) .getName; Log.i (venuetag, "название места проведения 12: + имя); но он дает для имени нулевое значение. Правильно ли я это делаю? Я использовал venues.size(), и он вернул 471, поэтому я уверен, что мой список работает .... – Jasper

+0

@ Jasper, я бы предположил, что структура данных Java, десериализованная до недостаточно хорошо соответствует структуре JSON, и Gson таким образом, не связывает элемент «name» JSON с полем «имя» Java. –

Смежные вопросы