fastjson序列化出现&ref的符号

简介

fastjson是阿里巴巴提供的转JSON对象的工具包,但是我在使用的时候,突然发现不对,序列化和打印的数据里面有一些奇怪的 &ref 字符。

一开始我以为是逻辑出现问题,结果发现是本来包就会有这个问题。对于 &ref 这个字符,c++里面是一般用来占位引用的。

然后我在网上搜了,了解了一下,知道原来fastjson为了防止对象重复和循环引用,做了这么一个优化,即如果出现重复或者循环引用,则使用$ref来表示重复或循环的部分。

重复,循环引用

重复引用就是说,在一个对象被建立出来后是在堆里面的,但是我们在循环里面如果使用这个对象,只是简单的改一下属性就放进容器里,那么容器里面装的都是同一个对象,是一样的东西。这就是重复引用。

循环引用是两个类里面互相包含它们类型的属性。这会引起stackoverflow的问题。是个严重的问题。

解决方案

因为这个引用优化是fastjson默认使用的模式,我们只需要在序列化的时候加上禁用的参数,就可以解决了。

1
JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);