正常循环生成的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);
}