3

私はいくつかの解決策を試しましたが、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);

最後に、要素が1つだけで、値が間違っているリストが表示されます。私が間違っていることを私に言い聞かせてもらえますか?

ありがとう。

4

1 に答える 1

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デシリアライザーを作成する必要があります。

于 2010-10-01T14:03:41.273 に答える