【问题标题】:Expected BEGIN_OBJECT but was BEGIN_ARRAY for JSON parsing using GSON预期为 BEGIN_OBJECT,但使用 GSON 解析 JSON 时为 BEGIN_ARRAY
【发布时间】: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&lt;List&lt;object1&gt;&gt;,而不是 List&lt;Data2&gt;。一个线索是您的 Data2 是一个对象,其字段名为 object1,但您的 JSON 没有任何对象具有名为该字段的字段。

标签: java json gson


【解决方案1】:

试着把 pojo 改成这个

class Data{
    @SerializedName("Data")
    @Expose
    private List<List<Data2>> Data = new ArrayList<List<Data2>>();
    @SerializedName("ColumnHeaders")
    @Expose
    private List<ColumnHeader> ColumnHeaders = new ArrayList<ColumnHeader>();
    @SerializedName("ReportHeaders")
    @Expose
    private List<ReportHeader> ReportHeaders = new ArrayList<ReportHeader>();
    @SerializedName("Summary")
    @Expose
    private List<Summary> Summary = new ArrayList<Summary>();
    //getter setter
}

class Data2{
   @SerializedName("Value")
   @Expose
   private String Value;
   //getter setter
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2016-09-26
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多