我在解析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);
如果你能帮我解决问题,我将不胜感激。提前致谢
答案 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。