GSON не заполняет список объектов - PullRequest
3 голосов
/ 01 октября 2010

Я пробовал несколько решений, и результат анализа JSON с GSON всегда получается неверным.

У меня есть следующий 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);

В конце я получаю список только с одним элементом и с неправильными значениями. Можете ли вы указать мне, что я делаю не так?

Спасибо.

1 Ответ

9 голосов
/ 01 октября 2010

Ваша структура javabean не соответствует структуре JSON (или наоборот). Свойство account_list в JSON в основном содержит массив с единственным объектом, который, в свою очередь, содержит различные свойства 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...