JSON 序列化对象出现 $ 符号

背景

今天开发伙伴遇到一个特别坑的问题,接口返回数据返回到前端时,某些数据出现了“$ref”开头的结构数据,跟前端jquery的引用符类似。

原因

跟踪代码发现源头在于写了一个map,这个map的key不同,但是value可能会指向同一个对象。

也就是说,key1指向了对象 obj ,key2也指向了对象 obj。

这个时候,返回给前端的json数据从就出现了“$ref.”。

造成的原因是:alibaba的FastJson会默认检测对象的依赖关系,避免循环依赖,造成堆栈溢出。

解决

从网上找的解决办法有两个

方式一

关闭引用检测

JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
或者
JSONObject.toJSONString(params, SerializerFeature.DisableCircularReferenceDetect);

方式二

创建新对像,可使用 Spring自带的BeanUtils来处理或new一个对象,然后一个个set

org.springframework.beans.BeanUtils.copyProperties(source, target);

我们的解决方案:

第一步:使用方案一将对象序列化成json字符串
第二步:在使用JSONObject反序列化成对象
这样反序列化后的对象,不再是同一个对象

这个方案的优点在于,代码改动最少,仅两行代码即可。

你可能感兴趣的:(JSON 序列化对象出现 $ 符号)