如何解决com.google.gson.JsonArray在java中解析Json文件时无法强制转换



我第一次用java解析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文件包含对象的数组,因此您应该能够使用parser.parse方法和显式强制转换立即读取JsonArray

然后,您应该迭代数组并使用get方法访问其JsonObject项。

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

但是,GsonJsonParser已被弃用,建议使用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

最新更新