Java-Note-fastjson循环引用的问题
2018-11-01 本文已影响0人
1nfinity
- 今天做项目时遇到一个问题: 浏览器接受到的 response 的 content 里面本应该是 json 字符串的地方变成了这样的字符串:
{"j2":{"ja1":[{"j3":"j33"},{"$ref":"$.j2.ja1[0]"}],"ja2":[{"$ref":"$.j2.ja1[0]"},{"$ref":"$.j2.ja1[0]"}]}}
- 最后找到原因: 在 fastjson 序列化的过程中默认开启循环引用, 这时 JSONObject 对象内的键值对会引用前面键值对中已存在的对象, 用类似
{"$ref":"$.j2.ja1[0]"}
的方式. 其中$
代表根路径,.*.
代表引用路径,ja1[0]
代表值位于 JSON 数组的位置 - 解决方法:
- 第一种: 保证 JSONObject 对象中不出现两个以上相同的对象
- 第二种: 在将 JSONObject 对象转换成 JSON 字符串的过程中加入 config 参数: SerializerFeature.DisableCircularReferenceDetect 用来禁止循环引用检测
- 最后找到原因: 在 fastjson 序列化的过程中默认开启循环引用, 这时 JSONObject 对象内的键值对会引用前面键值对中已存在的对象, 用类似