Java Android的Gson
我正在尝试使用Gson解析此JSON:Java Android的Gson,java,android,json,gson,Java,Android,Json,Gson,我正在尝试使用Gson解析此JSON: { "status": "status", "lang": "lang", "guid": "guid", "name": "name", "tags": "tags", "address": "address", "description": "description", "size": "M", "url": "http:\/\/", "email": "mymail@my
{
"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:
Gson gson = new Gson();
new GsonBuilder().serializeNulls().create();
Reader reader = new InputStreamReader(source);
response = gson.fromJson(reader, ResponseShow.class);
这是我的响应show
课程:
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;
}
public class openinghours {
public List<schedules> schedules;
@SerializedName("title")
public String title;
}
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;
}
public class day0 {
@SerializedName("date")
public String date;
public List<periods> periods;
}
public Map<String, Day> schedules;
这是我的课程表
课程:
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;
}
public class openinghours {
public List<schedules> schedules;
@SerializedName("title")
public String title;
}
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;
}
public class day0 {
@SerializedName("date")
public String date;
public List<periods> periods;
}
public Map<String, Day> schedules;
问题是,我在尝试分析day0
时遇到以下错误:
Error: java.lang.IllegalStateException: Expected BEGIN_ARRAY goal was BEGIN_OBJECT at line 1 column 2414
你的问题在类
openinghours
(顺便说一句,哪个应该是大写的!)。在这里,您试图将字段“schedules”
解析为一个列表
,正如您在JSON中看到的,它不是一个列表
,而是一个对象(它被{}
包围)
具体地说,“schedules”
字段如下所示:
"schedules": {
"day0": {
...
},
"day1": {
...
},
...
}
因此,对于您来说,最快的解决方案就是将openinghours
类中的属性schedules
的类型替换为:
public schedules schedules;
因为JSON字段“schedules”
是一个对象,它包含多个字段day0
,day1
,等等。。。而这正是你们班的课程安排。。。所以,这应该对你有用
无论如何,最好的解决方案是在
openinghours
类中使用Map
this:
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;
}
public class openinghours {
public List<schedules> schedules;
@SerializedName("title")
public String title;
}
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;
}
public class day0 {
@SerializedName("date")
public String date;
public List<periods> periods;
}
public Map<String, Day> schedules;
公共地图时间表;
这是最好的选择,因为这正是JSON字段“schedules”
所表示的。。。此外,通过这种方式,您只能有一个类天
,而不是许多类天0
,天1
,等等。。。这就更有意义了 尝试替换public class openinghours {
public List<schedules> schedules;
@SerializedName("title")
public String title;
}
您可以为距离定义一个类。\u info()://更改
@SerializedName("distance_info")
public Map<String, String> distance_info = new HashMap<String, String>();
也发布与解析相关的代码。问题涉及到那些代码。您提供的json有一个错误。它有一个结束']'但没有打开'['。这可能是一个复制粘贴错误,但也许你会添加第一个字符,以便更容易发现真正的问题。你的day0类是什么?即使你不需要为day0和其他几天创建不同的类,因为它只是更改了标签,否则所有的孩子都是一样的。我已经更改了问题…@Buchssullivan:让我再重复一遍如果你认为它是有效的和有用的,你可以接受这个答案…或者你可以随时评论如果你需要更多的帮助…