0

JSON 応答文字列の構造は次のとおりです。

{
    "1":{
        "data1":"1","data2":"test1", ...
    },
    "2":{
        "data1":"6","data2":"test2", ...
    },
    ...
}

そして、に入れるを取得したいと思いますArrayList<MyItem>。私はGSONを使用していますが、通常は次の方法で実行できます。

ArrayList<MyItem> items = 
    gson.fromJson(jsonString, new TypeToken<ArrayList<MyItem>>() {}.getType());

問題は、JSON 文字列にキーとして数字があるため、機能しないことですが、値を取得したいだけですArrayList(残念ながら、JSON 文字列を自分で変更することはできません)。これを効率的に行うにはどうすればよいですか?

4

2 に答える 2

1

おそらく、JSON を にデシリアライズしメソッドを使用してjava.util.Mapから値を取得し、 を受け取るコンストラクターを使用して新しい を作成します。MapCollectionMap.values()ArrayListCollection

于 2013-03-06T21:13:49.033 に答える
0

カスタム デシリアライザーを記述します。

class MyItem 
{
    String data1;
    String data2;
    // ...
}

class MyJSONList extends ArrayList<MyItem> {}

class MyDeserializer implements JsonDeserializer<MyJSONList> 
{
    public MyJSONList deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) 
        throws JsonParseException
    {
        MyJSONList list = new MyJSONList();
        for (Entry<String, JsonElement> e : je.getAsJsonObject().entrySet())
        {
            list.add((MyItem)jdc.deserialize(e.getValue(), MyItem.class));
        }

        return list;
    }

}

例:

String json = "{\"1\":{\"data1\":\"1\",\"data2\":\"test1\"},\"2\":{\"data1\":\"6\",\"data2\":\"test2\"}}";
Gson g = new GsonBuilder()
            .registerTypeAdapter(MyJSONList.class, new MyDeserializer())
            .create();
MyJSONList l = g.fromJson(json, MyJSONList.class);


for (MyItem i : l)
{
    System.out.println(i.data2);
}

出力:

テスト
1 テスト2

于 2013-03-06T22:26:57.377 に答える