我尝试了几种解决方案,使用GSON解析JSON的结果总是出错。
我有以下JSON:
{
"account_list": [
{
"1": {
"id": 1,
"name": "test1",
"expiry_date": ""
},
"2": {
"id": 2,
"name": "test2",
"expiry_date": ""
}
}
]
}
在我的Java项目中,我有以下结构:
public class Account{
private int id;
private String name;
private String expiry_date;
public Account()
{
// Empty constructor
}
public Account(int id, String name, String expiry_date)
{
this.id = id;
this.name = name;
this.expiry_date = expiry_date;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getExpiryDate() {
return expiry_date;
}
}
和
public class AccountList{
private List <Account> account_list;
public void setAccountList(List <Account> account_list) {
this.account_list = account_list;
}
public List <Account> getAccountList() {
return account_list;
}
}
我要反序列化的是:
Data.account_list = new Gson().fromJson(content, AccountList.class);
最后我得到List只有一个元素和错误的值。你能指出我正在做错的事吗?
感谢。
答案 0 :(得分:9)
您的javabean结构与JSON结构不匹配(或反之亦然)。 JSON中的account_list
属性基本上包含一个带有单个对象的数组,该对象又包含不同的Account
属性,似乎使用索引作为属性键。但Gson期待一个包含多个Account
对象的数组。
为匹配您的javabean结构,JSON应如下所示:
{
"account_list": [
{"id": 1, "name": "test1", "expiry_date": ""},
{"id": 2, "name": "test2", "expiry_date": ""}
]
}
如果无法更改JSON结构,则必须更改Javabean结构。但由于JSON结构本身没什么意义,因此很难给出适当的建议。 List<Map<Integer, Account>>
课程中的List<Account>
代替AccountList
将适用于此。但是如果你想保持List<Account>
,那么你需要创建一个自定义的Gson反序列化器。