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

所以首先是一个数组,而不是一个包含很多对象的对象(场地)(我删除了其中的大部分,因为这对我的问题并不重要),还有一些数组(比如 season_openings)。

我的解析代码是这样工作的,我使用的是 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;  
}

和场地.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,而不是一个将列表作为其属性之一的对象。

于 2012-07-01T20:36:40.730 回答