目录
背景
当使用fastjson解析JSON数据时,关于打印出来里面含有$ref的问题,在将JSONObject 的数据进行输出时,往往里面有$ref
分析
出现 $ref 大概率是因为返回的内容中有重复的数据,重复的数据指向同一个引用,比如其中一个属性的值是一个JSONArray的类型,那么里面就会出现重复的数据,该属性的值将使用的是引用。
异常情况
直接com.alibaba.fastjson.JSON#toJSONString(java.lang.Object)来序列化
System.out.println(JSON.toJSONString(jsonData));
解决方法
一个对象被重复引用,fastjson默认开启循环引用检查,所以序列化结果会出现($ref. $.),来标注被重复引用的对象。
1.将json对象对象转化为json字符串
2.将得到的json字符串在转回json对象
//以JSONObject 为例,创建一个JSONObject 对象
JSONObject orgData = new JSONObject();
//把JSONObject 对象转换为json字符串
String str = JSON.toJSONString(jsonData,
SerializerFeature.DisableCircularReferenceDetect);
//把得到的json字符串再次转换回JSONObject 对象
JSONObject resultData = JSONObject.parseObject(str);