【发布时间】:2021-03-28 15:10:36
【问题描述】:
我想获取“ids”并将其分配给一个数组列表。 config.json 文件在这里:
{
"users":[
{"user id":1,"user name":"A","user type":"bot1", "ids": [1 ,2]},
{"user id":2,"user name":"B","user type":"bot2","ids": [1 ,2]},
{"user id":3,"user name":"C","user type":"bot3","ids": [2 ,3]}
]
}
要读取这个 json 文件,我已经尝试过:
JSONArray jsonArrayForUsers = (JSONArray) jsonObject.get("users");
for (int i=0; i<jsonArrayForUsers.size(); i++) {
JSONObject obj2 = (JSONObject) jsonArrayForUsers.get(i);
long userId = (long) obj2.get("user id");
String userName = (String) obj2.get("user name");
String userType = (String) obj2.get("user type");
JSONArray jsonDatasetIds = (JSONArray) jsonObject.get("ids");
List <Integer> list = Arrays.asList(jsonDatasetIds);// Trying to covert JSONArray into an array but error occurs
//Type mismatch: cannot convert from List<JSONArray> to List<Integer>
users.add(new User((int)userId, userName, userType,list));
}
我可以正确读取“用户 ID”、“用户名”、“用户类型”。但我不知道如何阅读 -"ids": [1 ,2]- 部分并从中创建一个数组列表。
编辑: 修改后问题解决了
//It should've been 'obj2.get()'
JSONArray jsonDatasetIds = (JSONArray) obj2.get("ids");
for(int a = 0; i<jsonDatasetIds.size();i++){
list.add((int)jsonDatasetIds.get(a));
}
users.add(new User((int)userId, userName, userType,list));
但现在我无法将“jsonDatasetIds”中的值添加到“列表”。 换句话说,我不能从 JSONArray 中获取值。
【问题讨论】:
-
在您发布的 JSON 示例中,密钥是“ids”,而在 java 部分中,您正在读取密钥“数据集 ids”。尝试阅读 jsonObject.get("ids")。您也不能通过这种方式将 JSONArray 转换为 List
,您调用 Arrays.asList 所做的只是将对象 JSONArray 包装到一个新列表中。您使用哪个库来解析和读取 JSON? -
我正在使用这个“org.json.simple.parser.JSONParser”我也更正了“ids”部分@DanielCamarda
-
不确定该库,但 JSONArray 很可能是某种可迭代的,如果是这种情况,您可以直接遍历元素。
-
实际上,通过谷歌搜索,这里有一篇文章展示了如何使用 json-simple 迭代 JSONArray mkyong.com/java/json-simple-example-read-and-write-json 我的建议是使用更完整的库,如 Jackson 或 Gson,它也支持直接编组和解组自定义对象,因此您可以直接将 java bean 映射到 JSON 实体。
-
谢谢,我试试看
标签: arrays json type-conversion