4

我在解析 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);

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

4

2 回答 2

2

为了解析您的 JSON,我将创建类来包装响应,即:

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);

注意@SerializedName:为了遵循 Java 命名约定,使用注解将 JSON 响应和应用程序中的字段名称分开是很有趣的...

于 2013-04-18T19:38:14.800 回答
0

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

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

尝试更改您将其解析为的 Java 对象,以便快速修复:

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

请参阅此处的 Gson 文档“带有对象”部分:https ://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples 。

于 2013-04-18T19:25:32.967 回答