【发布时间】:2016-05-04 06:46:20
【问题描述】:
预期为 BEGIN_OBJECT,但使用 GSON 解析 JSON 时为 BEGIN_ARRAY。 我收到了由于 Gson Json 实现的类定义而发生的错误 需要使用 GSON 解析的 Json 格式
{
"StatusCode": 4,
"Data": {
"Data": [
[
{"Value": "19"},{"Value": "19"}],
[
{"Value": "77"},{"Value": "4"}
]
],
"ColumnHeaders": [
{
"Width": "11.0%",
"Title": "Date"
},
{
"Width": "7.6%",
"Title": "Total Clicks"
}
],
"ColumnHeaderGroups": [
{
"ColSpan": "1",
"Title": ""
},
{
"ColSpan": "7",
"Title": "Chats"
},
{
"ColSpan": "3",
"Title": "Times (HH:MM:SS)"
}
],
"ReportHeaders": [
{
"Name": "Title",
"Value": "Chat Summary By Date"
},
{
"Name": "Run Date",
"Value": "05/03/2016 10:52:39 AM"
},
{
"Name": "Time Zone",
"Value": "GMT+00:00"
}
],
"Summary": [
{
"Value": "96"
},
{
"Value": "23"
}
]
},
"Status": "success"
}
使用 gson 解析的类:
static class Page {
String Status;
Data Data;
}
static class Data {
String ReportID;
}
static class Page1 {
String StatusCode;
String Status;
Data1 Data;
}
static class Data1 {
List <Data2> Data;
List<ColumnHeaders> ColumnHeaders;
List<ReportHeaders> ReportHeaders;
List<Summary> Summary;
}
static class Data2{
List<object1> object1;
}
static class object1 {
String Value;
}
static class ColumnHeaders {
String Title;
}
static class Summary {
String Value;
}
static class ReportHeaders {
String Value;
}
使用gson解析json的代码: 需要解析
“值”:“19”,“值”:“19”,“值”:“77”,“值”:“4”
内部数据数组[]。
Gson gson = new Gson();
Page1 page = gson.fromJson(json, Page1.class);
String statusString = page.Status;
System.out.println("Status : " + statusString);
System.out.println("StatusCode : " + page.StatusCode);
if ("success".equals(statusString)) {
System.out.println("Inside if");
for (ColumnHeaders item : page.Data.ColumnHeaders)
System.out.print(item.Title + " :");
System.out.println();
for (Summary item1 : page.Data.Summary)
System.out.print(item1.Value + " :");
}
【问题讨论】:
-
Data1.Data的 JSON 是对象数组的数组,所以它应该是List<List<object1>>,而不是List<Data2>。一个线索是您的Data2是一个对象,其字段名为object1,但您的 JSON 没有任何对象具有名为该字段的字段。