将Json对象转换为Java ArrayList

3
我通过Ajax向我的Servlet传递了两个值。
我使用了
JsonObject data = new Gson().fromJson(request.getReader(), JsonObject.class);
System.out.println(data);

这是输出结果

{"0":"31/01/2017","1":"19/01/2017"}

现在我想将这些数据转换为java arraylist,但不确定如何操作。

我尝试过

Gson googleJson = new Gson();
JsonObject data = googleJson.fromJson(request.getReader(), JsonObject.class);
System.out.println(data);
JsonArray jsonArr = data.getAsJsonArray();
// jsonArr.

ArrayList jsonObjList = googleJson.fromJson(jsonArr, ArrayList.class);
for(int i=0; i< jsonObjList.size(); i++) {
    System.out.println(jsonObjList.get(i));
}

但是出现了错误

java.lang.IllegalStateException:这不是一个JSON数组。


有人能帮我吗?谢谢。


你可以使用 data.getAsString("0")data.getAsString("1"),因为它是一个 JSONObject - Pavneet_Singh
如果我的数据大小不固定怎么办?这意味着数据可能超过2。 - user3429531
一种方法是使用 entrySet() 并将所有键和值作为 mapentry 获取,另一种方法是创建具有相应映射字段的 POJO 类,意味着在 POJO 内部使用 Hashmap。 - Pavneet_Singh
可以使用ArrayList吗? - user3429531
我猜肯定有一种方法可以将它作为ArrayList,你可以在你的问题中提到它作为要求,有人肯定会指导你。 - Pavneet_Singh
2个回答

2
创建一个JsonArray实例,然后使用键将json元素添加到该数组中。
下面是解决方案:
Gson googleJson = new Gson();
JsonObject data = googleJson.fromJson(request.getReader(), JsonObject.class);
System.out.println(data);
JsonArray jsonArr = new JsonArray();

for(Entry<String, JsonElement> entry : data.entrySet()) {
    jsonArr.add(data.get(entry.getKey()));
}

ArrayList jsonObjList = googleJson.fromJson(jsonArr, ArrayList.class);
for(int i = 0; i < jsonObjList.size(); i++) {
    System.out.println(jsonObjList.get(i));
}

0

为了使Json成为有效的JsonArray对象,您应该将其格式化正确。您能否更改ajax返回的json字符串?如果可以,请将其更改为以下内容:

Gson googleJson = new Gson();
JsonObject data = googleJson.fromJson("{test: [{\"0\":\"31/01/2017\"},{\"1\":\"19/01/2017\"}]}", JsonObject.class);
System.out.println(data);
JsonArray jsonArr = data.getAsJsonArray("test");

ArrayList jsonObjList = googleJson.fromJson(jsonArr, ArrayList.class);
for(int i=0; i< jsonObjList.size(); i++) {
    System.out.println(jsonObjList.get(i));
}

如果没有,你应该自己解析它并将其转换为你想要的任何格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接