Domanda

Ho provato diverse soluzioni e il risultato di analisi JSON con GSON ottiene sempre sbagliato.

Ho il seguente JSON:

{
    "account_list": [
        {
            "1": {
                "id": 1,
                "name": "test1",
                "expiry_date": ""
            },
            "2": {
                "id": 2,
                "name": "test2",
                "expiry_date": ""
            }
        }
    ]
}

Nel mio progetto Java ho le seguenti strutture:

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

e

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

E quello che faccio di deserializzare è:

Data.account_list = new Gson().fromJson(content, AccountList.class);

Alla fine mi sto List con un solo elemento e con i valori errati. Si può indicare mi prego di quello che sto facendo di sbagliato?

Grazie.

È stato utile?

Soluzione

La vostra struttura javabean non corrisponde alla struttura JSON (o viceversa). La struttura account_list in JSON contiene essenzialmente una matrice con un oggetto solo che a sua volta contiene diverse proprietà Account, apparentemente utilizzando un indice come chiave di proprietà. Ma GSON si aspetta un array con più oggetti Account.

Per abbinare la struttura JavaBean, il JSON dovrebbe essere simile a questo:

{
    "account_list": [
        {"id": 1, "name": "test1", "expiry_date": ""},
        {"id": 2, "name": "test2", "expiry_date": ""}
    ]
}

Se non è possibile modificare la struttura JSON, allora dovete cambiare la struttura Javabean. Ma dal momento che la struttura JSON a proprie ha molto senso, è difficile dare una suggestione appropriata. Un List<Map<Integer, Account>> invece di List<Account> in classe AccountList lavorerà per questo. Ma se si desidera mantenere il List<Account>, allora avete bisogno di creare un GSON deserializzatore personalizzato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top