2012-07-01 23 views
5

jsonを使用して解析したいjsonのマッピングを作成する際に問題があります。それは非常に具体的なもので、その中にオブジェクトを持つjson配列を持つjsonファイルに関するものです。gsonでjsonファイルを解析する

私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 

その中のオブジェクトの多くのオブジェクト(会場)よりしたがって、最初の配列、(私の質問のためのthatsが重要ではないので、私は、それらのほとんどを削除) 、およびいくつかの配列(season_openingsなど)

私の解析コードは、gsonを使用してこのように動作します。入力ストリームは正常に動作します。

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 

クラスJsonResponseと

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

私はエラーを読むことができます:それは、 bjectsしかし、配列を取得します。私はさまざまなjsonresponse.classとjsonresponse.classでたくさん変わっていて、jsonオブジェクト全体にjson配列を置いていても(このタイプのjsonfileで作業する必要があるため、実際には解決策ではありません)しかし、毎回私はこれまたは同様のエラーを取得します。

私は解決策に近いと思います。誰も私ができないものを見て、救いの手をくれますか?おかげさまで

+0

無効なJSON例と不完全な無効なJavaコードの例では、実際に何が起こっているのかを推測している人がいます。解決しようとしている問題を示す完全な最小限の例を投稿することをお勧めします。 –

答えて

4

はこのよう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

@ジャスパー、私はJavaデータ構造体をデシリアライズしてもJSON構造体とマッチしないと思います。 JSON "name"要素をJavaの "name"フィールドにバインドしていません。 –

関連する問題