java - Gson抛出异常 "Expected BEGIN_OBJECT but was BEGIN_ARRAY"

标签 java json gson

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

我的类(class)是:

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 类中的数组映射吗?

最佳答案

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"}

关于java - Gson抛出异常 "Expected BEGIN_OBJECT but was BEGIN_ARRAY",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185484/

相关文章:

javascript - 如何在进行ajax调用时将所有参数作为单个对象传递

java - 替换的 freemarker 模板字段中不需要的引号

java - Spring MVC、JSON、长度超过 1000 个字符的字符串字段的错误序列化

java - JSON - 对象数组中的对象数组

java - 如何创建自己的文件类型?

java - 由从未引用的对象创建的垃圾

java - Eclipse 不再在快速修复中提出导入建议

使用 GSON 进行 Java 到 Json 验证

java - Gson StackOverflowError

Java 抽象表模型 : getValueAt does not use updated data