GSON ne remplit pas la liste des objets
Question
J'ai essayé plusieurs solutions et le résultat de l'analyse syntaxique JSON avec GSON obtient toujours tort.
Je le JSON suivant:
{
"account_list": [
{
"1": {
"id": 1,
"name": "test1",
"expiry_date": ""
},
"2": {
"id": 2,
"name": "test2",
"expiry_date": ""
}
}
]
}
Dans mon projet Java j'ai les structures suivantes:
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;
}
}
et
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;
}
}
Et ce que je fais à deserialize est:
Data.account_list = new Gson().fromJson(content, AccountList.class);
A la fin je reçois Liste avec un seul élément et avec de mauvaises valeurs. Pouvez-vous me indiquer PLASE ce que je fais mal?
Merci.
La solution
Votre structure de javabean ne correspond pas à la structure JSON (ou l'inverse). La propriété account_list
JSON contient essentiellement un tableau avec un Un seul objet qui à son tour contient des propriétés différentes de Account
, apparemment en utilisant un index comme la clé de la propriété. Mais Gson attend un tableau avec plusieurs objets Account
.
Pour correspondre à la structure javabean, le JSON devrait ressembler à ceci:
{
"account_list": [
{"id": 1, "name": "test1", "expiry_date": ""},
{"id": 2, "name": "test2", "expiry_date": ""}
]
}
Si vous ne pouvez pas changer la structure JSON, alors vous devez changer la structure Javabean. Mais puisque la structure JSON à ses propres a peu de sens, il est difficile de donner une suggestion appropriée. Un List<Map<Integer, Account>>
au lieu de List<Account>
en classe AccountList
travaillera pour cela. Mais si vous souhaitez garder un List<Account>
, vous devez créer une Gson personnalisée désérialiseur.