正常循环生成的Json:
由于重复引用导致出现:
代码:
JSONArray array = new JSONArray();
JSONArray array01 = new JSONArray();
JSONObject jsonObject01 = new JSONObject();
List<ItemDO> itemDolist = itemService.listById();
for (ItemDO itemDO : itemDolist) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("value", itemDO.getId());
jsonObject.put("text", itemDO.getItemName());
List<ItemDO> list = itemService.listByParentId(itemDO.getId());
for (ItemDO itemDO2 : list) {
jsonObject01.put("value", itemDO2.getId());
jsonObject01.put("text", itemDO2.getItemName());
array01.add(jsonObject01);
}
jsonObject.put("children", array01);
array01 = new JSONArray();
array.add(jsonObject);
}
重复引用:由于jsonObject01是在循环外new的,然后在循环中set值并加入array01,因此array01中存放的一直是同一对象,fastjson对于重复引用便会出现"$ref":"$[0]。
所以循环时应该避免对象复用:
JSONArray array = new JSONArray();
JSONArray array01 = new JSONArray();
List<ItemDO> itemDolist = itemService.listById();
for (ItemDO itemDO : itemDolist) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("value", itemDO.getId());
jsonObject.put("text", itemDO.getItemName());
List<ItemDO> list = itemService.listByParentId(itemDO.getId());
for (ItemDO itemDO2 : list) {
JSONObject jsonObject01 = new JSONObject();
jsonObject01.put("value", itemDO2.getId());
jsonObject01.put("text", itemDO2.getItemName());
array01.add(jsonObject01);
}
jsonObject.put("children", array01);
array01 = new JSONArray();
array.add(jsonObject);
}
本文介绍了一个关于使用Java生成JSON时遇到的重复引用问题。在构建嵌套的JSON对象过程中,由于对象复用而导致fastjson识别为同一对象,出现了$ref:$[0]的错误提示。通过修改循环内的对象创建方式,避免了对象复用,解决了该问题。
1272

被折叠的 条评论
为什么被折叠?



