5

jsonを使用して解析したいjsonのマッピングを作成するのに問題があります。これは非常に具体的で、オブジェクトを含むjson配列を含む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

したがって、最初に、多数のオブジェクトを含むオブジェクト(venue)(私の質問では重要ではないため、ほとんどのオブジェクトを削除しました)といくつかの配列(season_openingsなど)よりも配列を使用します。

私の解析コードはこのように機能し、gsonを使用しています。inputstreamは正常に機能します。

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

もちろん、私はエラーを読むことができます:それはオブジェクトを期待しますが、配列を取得します。私はさまざまなjsonresponse.classで、さらにはjson配列全体をjsonオブジェクトに配置することでさえも大きく変化しました(このタイプのjsonfileで作業する必要があるため、実際には解決策ではありません)。しかし、私はこれまたは同様のエラーを受け取るたびに。

私は解決策に近づいていると思いますが、誰かが私ができないことを見て、私に助けを与えることができますか?ありがとう。

4

1 に答える 1

4

次のようにGsonに電話してみてください。

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

これが機能するのは、JSONドキュメントが、Listプロパティの1つとしてリストを持つオブジェクトではないためです。

于 2012-07-01T20:36:40.730 に答える