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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top