Java with GSON—仅将值反序列化为JSON字符串的ArrayList
我的JSON响应字符串的结构如下:Java with GSON—仅将值反序列化为JSON字符串的ArrayList,java,json,arraylist,deserialization,gson,Java,Json,Arraylist,Deserialization,Gson,我的JSON响应字符串的结构如下: { "1":{ "data1":"1","data2":"test1", ... }, "2":{ "data1":"6","data2":"test2", ... }, ... } 我想得到要放入ArrayList的值。我使用GSON,通常我可以这样做: ArrayList<MyItem> items = gson.fromJson(jsonString, new
{
"1":{
"data1":"1","data2":"test1", ...
},
"2":{
"data1":"6","data2":"test2", ...
},
...
}
我想得到要放入ArrayList
的值。我使用GSON,通常我可以这样做:
ArrayList<MyItem> items =
gson.fromJson(jsonString, new TypeToken<ArrayList<MyItem>>() {}.getType());
ArrayList项=
fromJson(jsonString,newTypeToken(){}.getType());
问题是,它不起作用,因为我的JSON字符串以数字作为键,但我只想获取要放入
ArrayList
的值(不幸的是,JSON字符串不能由我自己更改)。如何有效地做到这一点?我可能会将JSON反序列化为java.util.Map
,使用Map
作为集合获取值,然后使用创建一个新的ArrayList
。编写一个自定义反序列化程序
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;
}
}
输出:
测试1
测试2
为什么不尝试将json放入Map
,然后再List Map=foreach(…)
?我就是这样做的。我想,有更好的解决办法,但我也没有找到。
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);
}