当前位置: 首页 > 知识库问答 >
问题:

Gson引发异常“预期为BEGIN_OBJECT,但为Begin_Array”

百里胜泫
2023-03-14
Class A{
String name;
JSONArray phone;
.....
}
{"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中的数组映射吗?

共有1个答案

水飞掣
2023-03-14

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

试试这个:

class Phone
{
    String no, type;
}

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

此外,列表中的最后一个电话号码在JSON中有一个bug:

{"no":"4321","type","office"}
{"no":"4321","type":"office"}
 类似资料:
  • 问题内容: 我在列表中仅收到一个项目时收到此错误。我在服务器端REST Web服务中使用Jersey,当List返回一个元素并且当我得到它时,我仅收到错误,但是当它包含多个元素时,它可以正常工作,这就是我的工作方式它: 为什么Jersey不发送包含一个项目的列表?这是球衣的虫子吗?有没有办法使它始终序列化为数组? 当Web服务返回0元素时,这是我的JSON数据: 当Web服务返回1元素时,这是我的

  • 问题内容: 我在尝试将JSON解组到对象中时遇到GSON错误。错误( 应为BEGIN_OBJECT,但在第3行第22列处为STRING )指向下面输入的第3行。 我是否相对于Bean正确映射了JSON? 我输入的JSON看起来是这样的: 问题答案: 不,您没有正确映射它,因为您的json对象不是,它包含。 你可以创建一个类只是为了封装你,但它是清洁反序列化容器的使用 然后使用解析有趣的内容 并且我

  • 问题内容: 我正在尝试将内容反序列化为自定义类型。 这段代码 引发跟随异常 为什么Gson无法将我的JSON文本正确转换为我的POJO类型? 问题答案: 作为异常消息状态 反序列化时,Gson期望使用JSON对象,但发现了一个JSON数组。由于无法从一种转换为另一种,因此引发了此异常。 此处描述JSON格式。简而言之,它定义了以下类型:对象,数组,字符串,数字和null,以及布尔值和。 在Gson

  • 我的Retrofit2调用出现以下异常: 学分类别:

  • 我试图使用gson解析下面的json字符串,并且我得到了这个异常。 异常很明显,它期待一个对象(可能是Datapoint),但它遇到了一个数组。我确信是我的模型类导致了这个问题,但是我不明白我的模型类应该是什么样子才能解析json而不会失败。

  • 我不熟悉GSON和改装,这是我的输出模型(仅供参考结构), 这是我的输出 这是我的改装代码 应为BEGIN_对象,但为BEGIN_数组“ 我尝试过用List替换RootObject