如何将此响应解析为 ArrayList
. 我有一个包含对象列表的层次结构数组,在每个对象中当我得到类型为“group”时就会有 JSONArray
作为“内容”,在 JSONArray
我能得到n个物体。每个对象可以包含“group”类型。如何解析并保存在 ArrayList
.
hierarchy:
[
{
"id":"5fd1b4384f5ee9964099b6b0",
"name":"Dev_5 Category Group `",
"type":"group",
"contents":[
{
"id":"5fd1b4384f5ee9964099b6af",
"name":"Dev_5 Parent Category Group 1",
"type":"group",
"contents":[
{
"id":"5fd1b567505ee9af3a7a65c8",
"name":"Dev_5 Parent Category Group 2",
"type":"group",
"contents":[
{
"id":"5fd1b4384f5ee9964099b6b1",
"type":"category"
}
],
"desc":"",
"image":""
}
],
"desc":"",
"image":""
},
{
"id":"5fd1b57b4f5ee9114599b679",
"type":"category"
}
],
"desc":"",
"image":""
},
{
----
},
{
---
}
]
代码
for (int i = 0; i < hierarchyArray.length(); i++)
{
hierarchyItemList.clear();
JSONObject obj = hierarchyArray.optJSONObject(i);
JSONArray contentArray = obj.optJSONArray("contents");
HierarchyItem item = new HierarchyItem();
item.setId(obj.optString("id"));
item.setType(obj.optString("type"));
item.setGroupName(obj.optString("name"));
if (obj.optString("type").equalsIgnoreCase("group") && contentArray != null &&
contentArray.length() > 0) {
hierarchyItemList.clear();
for (int j = 0; j < contentArray.length(); j++)
{
hierarchyItemList.add(MenuJSON.hierarchyJSON(contentArray.optJSONObject(j)));
}
item.setContentList(hierarchyItemList);
}
if (obj.optString("type").equalsIgnoreCase("category") ||
(obj.optString("type").equalsIgnoreCase("group") && contentArray != null &&
contentArray.length() > 0)) {
itemList.add(item);
}
}
private static HierarchyItem hierarchyJSON(JSONObject obj) {
HierarchyItem item = new HierarchyItem();
item.setId(obj.optString("id"));
item.setType(obj.optString("type"));
item.setGroupName(obj.optString("name"));
JSONArray contentArray = obj.optJSONArray("contents");
List<HierarchyItem> hierarchyItemList = new ArrayList<>();
if (obj.optString("type").equalsIgnoreCase("group") && contentArray != null && contentArray.length() > 0) {
hierarchyItemList.clear();
for (int j = 0; j < contentArray.length(); j++) {
hierarchyItemList.add(MenuJSON.hierarchyJSON(contentArray.optJSONObject(j)));
}
item.setContentList(hierarchyItemList);
}
return item;
}
使用上述代码,最后一项将更新为中的所有项 ArrayList
. 如何解决这个问题。提前谢谢。
2条答案
按热度按时间g0czyy6m1#
您已经清除了每个循环中的值列表,因此现有数据将被清除,并且新值将在列表中更新,因为您使用了递归循环。我删除了list value的clear(),并在循环开始时再次初始化。这会解决你的问题。
pnwntuvh2#
如果hierarchyitemlist是您的结果列表,您不应该在多个地方清除它,而应该只在最开始的地方清除它。
这是一个清理过的版本
test.json: