Gson抛出异常“预计BEGIN_OBJECT但是BEGIN_ARRAY”

时间:2014-10-03 19:25:56

标签: java json gson

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

我的课程是:

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

1 个答案:

答案 0 :(得分:2)

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

试试这个:

class Phone
{
    String no, type;
}

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

列表中的最后一个phonenumber在json中有一个错误:

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

应该是:

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