Android json错误com.google.gson.JsonSyntaxException:java.lang.IllegalStateException

时间:2013-04-18 19:17:11

标签: android json gson

我在解析json数据时面临这个错误

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2

我无法找到解决方案。我的json数据是:

{
  "user": [
    {
      "email": "wijden@jerseyrest.com",
      "firstName": "Wijden",
      "id": "1",
      "lastName": "User"
    }, {
      "email": "user@jerseyrest.com",
      "firstName": "Sample",
      "id": "2",
      "lastName": "User"
    }, {
      "email": "ingenieur@jerseyrest.com",
      "firstName": "Ingenieur",
      "id": "3",
      "lastName": "User"
    }
  ]
}

这就是我做到的:

Type type = new TypeToken<List<WorkItem>>() { }.getType();
List<WorkItem> workitems = (List<WorkItem>) new Gson().fromJson(resultat, type);

如果你能帮我解决问题,我将不胜感激。提前致谢

2 个答案:

答案 0 :(得分:2)

为了解析你的JSON,我创建了 wrap 响应的类,即:

public class Response {
  @SerializedName("user")
  private List<User> userList;
  //getters and setters
}

public class User{
  @SerializedName("id")
  private int id;
  @SerializedName("email")
  private String email;
  @SerializedName("firstName")
  private String firstName;
  @SerializedName("lastName")
  private String lastName;
  //getters and setters
}

然后,为了解析您的JSON响应,您只需要执行:

Gson gson = new Gson();
Response data = gson.fromJson(yourJsonString, Response.class);

然后您可以非常轻松地访问您的数据,例如:

User user = data.getUserList.get(i);

注意:为了遵循Java命名约定,使用注释@SerializedName对于分离JSON响应中和您的应用中的字段名称很有意义...

答案 1 :(得分:0)

当您尝试解析像Gson希望您拥有JSON ARRAY(如错误消息所述)的集合时,而不是对象。您的JSON是一个包含ARRAY(对象数组)的OBJECT。

要解析您需要一个具有集合作为类型的Java对象。或者,您需要将json更改为数组,或者您可以创建自定义序列化器/反序列化器(或者提出其他一些技巧,但最重要的是您的JSON不是数组,在当下)。

尝试更改解析它的Java对象,以便快速修复:

public class WorkItemsContainer {
  private List<WorkItem> workItems;
  //getters/setters/ctor/etc
}

请在此处查看Gson文档“with objects”部分:https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples