我第一次在Java中解析json文件。我的json文件结构是固定的(我无法更改)。我经历了不同的答案,但对我的json没有帮助。我想在一个列表中列出所有组名,在另一个列表中找到单元名。请帮助解决此错误,谢谢。我使用下面的代码并尝试从json读取,但解析失败。JSON文件:
[
{"No":"1","Component":"Amazon","group_id":"1","Group Name":"shop","Unit Name":"UN","PM":"NULL"},
{"No":"2","Component":"Amazon","group_id":"1","Group Name":"shop","Unit Name":"UM","PM":"NULL"},
{"No":"3","Component":"Amazon","group_id":"1","Group Name":"shop","Unit Name":"UP","PM":"NULL"},
{"No":"4","Component":"Amazon","group_id":"1","Group Name":"shop","Unit Name":"SO","PM":"NULL"},
{"No":"5","Component":"Amazon","group_id":"1","Group Name":"cart","Unit Name":"SP","PM":"NULL"},
{"No":"6","Component":"Amazon","group_id":"2","Group Name":"payment","Unit Name":"NZ","PM":"TRUE"}
]
代码试用1:
JsonArray jsonArray = new JsonArray();
Object obj = new JsonParser().parse(new FileReader(JSON_FILE_PATH));
JsonObject jsonObject = jsonArray.getAsJsonObject();
String groupName = jsonObject.get("Group Name").toString();
ERROR: Exception in Test Case: (IllegalStateException: Not a JSON Object: [])
java.lang.IllegalStateException: Not a JSON Object: []
代码试用2:
Object obj = new JsonParser().parse(new FileReader(JSON_FILE_PATH));
JsonObject jsonObject = (JsonObject) obj;
String firstName = jsonObject.get("Group Name").toString();
ERROR: Exception in Test Case: (ClassCastException: com.google.gson.JsonArray cannot be cast to com.google.gson.JsonObject)
java.lang.ClassCastException: com.google.gson.JsonArray cannot be cast to com.google.gson.JsonObject
编辑的解决方案:
JsonArray jsonArray = new JsonParser().parse(new FileReader(fileName)).getAsJsonArray();
ArrayList<String> pmGrpListFromWebOm = new ArrayList<>();
for (JsonElement jsonObjectElement : jsonArray) {
JsonObject jsonObject = jsonObjectElement.getAsJsonObject();
String grpname= jsonObject.get("Group Name").toString();
pmGrpListFromWebOm.add(grpname);
}
JSON文件包含对象数组,因此您应该能够JsonArray
立即读取usingparser.parse
方法和显式强制转换。
然后,您应该迭代数组并JsonObject
使用get
方法访问其项目。
JsonParser parser = new JsonParser();
JsonArray jsonArray = (JsonArray) parser.parse(new FileReader(JSON_FILE_PATH));
for (int i = 0; i < jsonArray.size(); i++) {
JsonObject item = (JsonObject) jsonArray.get(i);
String groupName = item.get("Group Name").getAsString();
System.out.printf("%d group=%s%n", i, groupName); // item index and groupName
}
输出将是:
0 group=shop
1 group=shop
2 group=shop
3 group=shop
4 group=cart
5 group=payment
但是,JsonParser
不建议使用Gson ,建议使用Gson
对象映射器,它允许以类型安全的方式读取/写入对象。
可以将示例JSON中的每一项视为键-值对的映射,其中键和值均为String。
Gson gson = new Gson();
// prepare type information
Type itemListType = new TypeToken<ArrayList<Map<String, String>>>(){}.getType();
// read the list
List<Map<String, String>> list = gson.fromJson(json, itemListType);
// process items in the list
for (Map<String, String> item : list) {
String no = item.get("No");
String groupName = item.get("Group Name");
System.out.printf("no=%s group=%s%n", no, groupName);
}
输出:
no=1 group=shop
no=2 group=shop
no=3 group=shop
no=4 group=shop
no=5 group=cart
no=6 group=payment
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句