引用jar:com.alibaba.fastjson.JSONObject
出现问题:循环给对象赋值时,会出现$ref重复引用问题。是因为fastjson会判断是否有对象重复引用
解决方法:fastjson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来关闭引用检测。关闭检测后,重复引用对象时就不会被$ref代替了。
用法:JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);
for (Map<String, Object> map2 : list1) {
//查找业务数据
Map<String, Object> qst = maper.queryList(id);
String jsonString = JSON.toJSONString(JSON.parseObject(qst.get("qcontent").toString(),Map.class), SerializerFeature.DisableCircularReferenceDetect);
String qstStr = JSON.toJSONString(qst, SerializerFeature.DisableCircularReferenceDetect);
//业务需求,则需要添加两条记录,此处业务省略
Map<String,Object> reMap = new HashMap<>();
qst.put("son", JSON.parseObject(jsonString,Map.class));
reMap.put("father", JSON.parseObject(qstStr,Map.class));
reMap.putAll(map2);
list2.add(reMap);
qst.put("son", JSON.parseObject(jsonString,Map.class));
map2.put("father", JSON.parseObject(qstStr,Map.class));
list2.add(map2);
}
这个SerializerFeature.DisableCircularReferenceDetect就是关闭引用检测,就不会出现$ref了
参考地址:https://www.cnblogs.com/tutubaobao/p/9760524.html