【问题标题】:Gson throwing exception "Expected BEGIN_OBJECT but was BEGIN_ARRAY"Gson 抛出异常“预期为 BEGIN_OBJECT 但为 BEGIN_ARRAY”
【发布时间】:2014-10-03 19:25:55
【问题描述】:

我已阅读之前提出的问题,但没有一个对我有帮助。

我的班级是:

Class A{
String name;
JSONArray phone;
.....
}

我正在使用 Rest 客户端发送请求,请求是这样的:

{"name":"abc","phone":[{"no":"1234","type":"landline"},{"no":"4321","type","office"}]}

现在这个请求的架构是有效的,但是当我发送请求时,我的应用程序会抛出一个异常,例如:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY

我将请求映射为:

           Gson gson=new Gson();
           A para = null;
            try{
                para = gson.fromJson(json, A.class);

            }catch(Exception e){
                e.printStackTrace();
                return false;
            }

有人能解释一下为什么我的请求中的数组没有与 A 类中的数组映射吗?

【问题讨论】:

    标签: java json gson


    【解决方案1】:

    Gson 库的 Json Array 对象是“JsonArray”而不是“JSONArray”,但真正的问题是您告诉它要将字符串从 JSON 解析为 JSON 对象,而不是您自己的内部对象,

    试试这个:

    class Phone
    {
        String no, type;
    }
    
    class A
    {    
        String name;
        List<Phone> phone;  //or Phone[] phone;
    }
    

    列表中的最后一个电话号码在 json 中有一个错误:

    {"no":"4321","type","office"}
    

    应该是:

    {"no":"4321","type":"office"}
    

    【讨论】:

    • 感谢您的回答,但我刚刚将电话更改为 org.simple.json.JSONArray 并且一切正常。是的,我写的很匆忙,就像打字,办公室一样。
    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多