首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Gson for Android

Gson for Android
EN

Stack Overflow用户
提问于 2013-08-12 18:09:37
回答 2查看 544关注 0票数 2

我正在尝试使用Gson来解析这个JSON:

代码语言:javascript
代码运行次数:0
运行
复制
{
    "status": "status",
    "lang": "lang",
    "guid": "guid",
    "name": "name",
    "tags": "tags",
    "address": "address",
    "description": "description",
    "size": "M",
    "url": "http:\/\/",
    "email": "mymail@mysite.com",
    "fax": "",
    "tel": "000 000 00 00",
    "total_votes": "0",
    "total_value": "0",
    "rate": 5,
    "open2424": "0",
    "category_main_name": "category_main_name",
    "category_name": "category_name",
    "category_main_name2": "category_main_name2",
    "category_name2": "category_name2",
    "category_main_name3": "category_main_name3",
    "category_name3": "category_name3",
    "park_type": "park_type",
    "park_handicap": "0",
    "park_free": "1",
    "park_description": "",
    "datemodinfo": "2012-12-15 18:18:05",
    "sponsor": "2",
    "sponsorstart": "2012-12-16 13:38:51",
    "sponsorend": "2013-12-16 13:38:51",
    "zip": "zip",
    "town": "town",
    "area": "area",
    "latitude": "latitude",
    "longitude": "longitude",
    "distance_info": {
        "distance": 10,
        "unit": "unit"
    },
    "image": "image",
    "url": "url",
    "open": "1",
    "openinghours": [{
        "schedules": {
            "day0": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-12"
            },
            "day1": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-13"
            },
            "day2": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-14"
            },
            "day3": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-15"
            },
            "day4": {
                "periods": [{
                    "from": "09:00",
                    "to": "12:30"
                },
                {
                    "from": "14:00",
                    "to": "18:00"
                }],
                "date": "2013-08-16"
            },
            "day5": {
                "date": "2013-08-17"
            },
            "day6": {
                "date": "2013-08-18"
            }
        },
        "title": "title"
    }]
}

我用下面的代码解析JSON:

代码语言:javascript
代码运行次数:0
运行
复制
Gson gson = new Gson();
new GsonBuilder().serializeNulls().create();
Reader reader = new InputStreamReader(source);
response = gson.fromJson(reader, ResponseShow.class);

这是我的ResponseShow类:

代码语言:javascript
代码运行次数:0
运行
复制
public class ResponseShow {

    @SerializedName("status")
    public String status;    
    @SerializedName("lang")
    public String lang;    
    @SerializedName("guid")
    public String guid;    
    @SerializedName("name")
    public String name;    
    @SerializedName("tags")
    public String tags;    
    @SerializedName("address")
    public String address;    
    @SerializedName("description")
    public String description;    
    @SerializedName("size")
    public String size;    
    @SerializedName("url")
    public String url;    
    @SerializedName("email")
    public String email;    
    @SerializedName("fax")
    public String fax;    
    @SerializedName("tel")
    public String tel;    
    @SerializedName("total_votes")
    public String total_votes;    
    @SerializedName("total_values")
    public String total_values;    
    @SerializedName("rate")
    public String rate;    
    @SerializedName("open2424")
    public String open2424;    
    @SerializedName("category_main_name")
    public String category_main_name;    
    @SerializedName("category_name")
    public String category_name;    
    @SerializedName("category_main_name2")
    public String category_main_name2;    
    @SerializedName("category_name2")
    public String category_name2;    
    @SerializedName("category_main_name3")
    public String category_main_name3;    
    @SerializedName("category_name3")
    public String category_name3;    
    @SerializedName("park_type")
    public String park_type;    
    @SerializedName("park_handicap")
    public String park_handicap;    
    @SerializedName("park_free")
    public String park_free;    
    @SerializedName("park_description")
    public String park_description;    
    @SerializedName("datemodinfo")
    public String datemodinfo;    
    @SerializedName("sponsor")
    public String sponsor;    
    @SerializedName("sponsorstart")
    public String sponsorstart;    
    @SerializedName("sponsorend")
    public String sponsorend;    
    @SerializedName("town")
    public String town;    
    @SerializedName("area")
    public String area;    
    @SerializedName("latitude")
    public String latitude;    
    @SerializedName("longitude")
    public String longitude;    
    @SerializedName("distance_info")
    public Map<String, String> distance_info = new HashMap<String, String>();    
    @SerializedName("zip")
    public String zip;    
    @SerializedName("image")
    public String image;    
    @SerializedName("ligoo_url")
    public String ligoo_url;    
    @SerializedName("open")
    public int open;    
    public List<openinghours> openinghours;    
    @SerializedName("query")
    public String query;
}

这是我的openinghours类:

代码语言:javascript
代码运行次数:0
运行
复制
public class openinghours {

    public List<schedules> schedules;       
    @SerializedName("title")
    public String title;

}

这是我的Schedules类:

代码语言:javascript
代码运行次数:0
运行
复制
public class schedules {

    public List<day0> day0;
    public List<day1> day1;
    public List<day2> day2;
    public List<day3> day3;
    public List<day4> day4;
    public List<day5> day5;
    public List<day6> day6;
}

还有我的day0类:

代码语言:javascript
代码运行次数:0
运行
复制
public class day0 {

    @SerializedName("date")
    public String date;         
    public List<periods> periods; 
}

问题是我在尝试解析day0时遇到以下错误

代码语言:javascript
代码运行次数:0
运行
复制
Error: java.lang.IllegalStateException: Expected BEGIN_ARRAY goal was BEGIN_OBJECT at line 1 column 2414
EN

回答 2

Stack Overflow用户

发布于 2013-08-14 19:38:11

您的问题出在openinghours类中( btw应该是大写的!)。在这里,您正试图将字段"schedules"解析为一个List,正如您在JSON中看到的那样,它不是一个List,而是一个对象(它被{ }包围)。

具体地说,"schedules"字段如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
"schedules": {
    "day0": {
        ...
    },
    "day1": {
        ...
    },
    ...
}

因此,对于您来说,最快的解决方案是将openinghours类中的属性schedules的类型替换为:

代码语言:javascript
代码运行次数:0
运行
复制
public schedules schedules;

因为JSON字段"schedules"是一个包含多个字段day0day1等的对象……这就是你的schedules类...所以,这对你来说应该是可行的!

无论如何,最好的解决方案是在您的openinghours类中使用Map

代码语言:javascript
代码运行次数:0
运行
复制
public Map<String, Day> schedules;

这是最好的选择,因为这正是JSON字段"schedules"所表示的……此外,通过这种方式,您可以只有一个类Day,而不是许多类day0day1等……这就更有意义了!

票数 1
EN

Stack Overflow用户

发布于 2013-08-14 19:41:10

尝试替换

代码语言:javascript
代码运行次数:0
运行
复制
public class openinghours {
    public List<schedules> schedules;       
    @SerializedName("title")
    public String title;
}

//by

代码语言:javascript
代码运行次数:0
运行
复制
public class openinghours {
    public  schedules  schedules;       
    @SerializedName("title")
    public String title;
} 

您可以为distance_info()定义一个类:

代码语言:javascript
代码运行次数:0
运行
复制
class DistanceInfo{
    private int distance;
    private unit;
}

//更改

代码语言:javascript
代码运行次数:0
运行
复制
@SerializedName("distance_info")
public Map<String, String> distance_info = new HashMap<String, String>();

//至

代码语言:javascript
代码运行次数:0
运行
复制
@SerializedName("distance_info")
public DistanceInfo distance_info;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18184405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档