问题描述
在自己的项目中,通过FastJson获取数据时,在数据中出现$ref等奇怪的字符,导致前端无法正常解析JSON数据。

ru
数据对象
项目中包含两个一对多关系的对象,部门Dept和员工Emp
他们具有一对多关系,包含关系如图.

问题产生流程
当向后台请求EMP数据时,前面两个Emp中的DEPT还正常,当请求第三个JSON时,就出现了这个ref表示的意义是这个dept与根引用的第一个(0)的dept相同。
这是FastJson表示循环引用时一种节约内存的方法。通过这样的标识符来描述这个JSON对象,可以节省浏览器内存
解决方法
关闭这个循环应用机制即可。
配置一下自己的FastConfig,在FastJsonConfig加入SerializerFeature.DisableCircularReferenceDetect这个配置即可解决。

附:循环引用
循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。引用是通过$ref标示的,下面介绍一些引用的描述
-
"$ref":".." 上一级
-
"$ref":"@" 当前对象,也就是自引用
-
"
" 根对象
-
"
.children.0" 基于路径的引用,相当于 root.getChildren().get(0)
网友评论