1

次のjsonの逆シリアル化に問題があります:

{
   "17":"asdf",
   "18":"fdsa",
   "19":"gfds",
   "34":"vcxz",
   "35":"oiue",
   "36":"oiuy"
}

に:

public class CategoryList {

    List<Category> list;
}

public class Category {

    String id;
    String name;
}

私は以下を受け取りますIllegalStateException

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2

どこが間違っているか教えてください。

4

2 に答える 2

1

クラスにはList.

次の JSON を試してください。

{
    "list": [
        {
            "id": "17",
            "name": "asdf"
        }
    ]
}

正しくシリアル化する必要があります

于 2013-10-23T22:00:10.860 に答える
1

以下のjson

{
   "17":"asdf",
   "18":"fdsa",
   ...
}

配列ではなく JSON オブジェクトです。クラス (Category および CategoryList) は、次の json を使用する必要があります。

{
    list: [
        {id: 17, name: "asdf"},
        {id: 18, name: "fdsa"},
        ....
    ]
}

json またはクラスを変更します。

編集:問題は、(サンプルを理解していれば) json オブジェクトに可変数のフィールドがあることです。これは、クラスの代わりに hashmap のようなものを使用する必要があることを意味します。jsonをデシリアライズしてみてください

Map<int, String>

この回答でいくつかのヘルプを見つけることができます: https://stackoverflow.com/a/8103092/2880555 (このリンクhttp://programmerbruce.blogspot.com/2011/06/gson-v-jackson. htmlを開き、そのページで「任意の JSON オブジェクトをマップに変換する Gson コード」を検索するよう求めました)。

于 2013-10-23T22:03:58.363 に答える