Java Gson抛出异常“;应为BEGIN“U对象,但为BEGIN“U数组”;

Java Gson抛出异常“;应为BEGIN“U对象,但为BEGIN“U数组”;,java,json,gson,Java,Json,Gson,我已经阅读了之前提出的问题,但没有一个对我有帮助 我的班级是: Class A{ String name; JSONArray phone; ..... } 我正在使用Rest客户端发送请求,请求如下: {"name":"abc","phone":[{"no":"1234","type":"landline"},{"no":"4321","type","office"}]} 现在,此请求的架构有效,但当我发送请求时,我的应用程序会引发如下异常: com.google.gson.JsonSyn

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

我的班级是:

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数组对象是“JsonArray”而不是“JsonArray”,但真正的问题是您告诉它将字符串从Json解析为Json对象,而不是您自己的内部对象

试试这个:

class Phone
{
    String no, type;
}

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

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

谢谢你的回答,但我刚把电话换成org.simple.json.JSONArray,一切正常。是的,我写得很快,就像打字一样,办公室。
{"no":"4321","type":"office"}