美文网首页
JSON 序列化对象出现 $ 符号

JSON 序列化对象出现 $ 符号

作者: 得鹿梦为鱼 | 来源:发表于2019-07-23 21:59 被阅读0次

背景

今天开发伙伴遇到一个特别坑的问题,接口返回数据返回到前端时,某些数据出现了“$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 序列化对象出现 $ 符号

    背景 今天开发伙伴遇到一个特别坑的问题,接口返回数据返回到前端时,某些数据出现了“$ref”开头的结构数据,跟前端...

  • iOS JSON 数据解析

    (1)JSON数据->OC对象(反序列化) (2)OC对象->JSON对象(序列化) (3)OC对象和JSON数据...

  • 序列化,序列化高级

    序列化 序列化:把对象(Dict)转成可传输数据(JSON) 反序列化:把传输数据(json)转成对象(Dict)...

  • FastJson的基本使用实践

    序列化一个对象成为JSON字符串 反序列化一个JSON字符串成为一个对象 数组序列化成为JSON字符串 JSON字...

  • DRF之序列化

    序列化 把Python中对象转换为json格式字符串 反序列化 把json格式转为为Python对象。 序列化两大...

  • R语言 Json文件编辑/读写

    杀杀 有时候对数据的处理需要用到json格式的文件,json格式其实就是文本格式的序列化的对象,可以用简单的符号组...

  • Django 学习笔记

    [TOC] 学习路径 1. 序列化 对象处理 实例序列化 转json 2. 反序列化 恢复对象实例 (可选)序列化...

  • Android安卓开发 Gson使用教程

    Gson的序列化 多个对象转json Gson的反序列化,json转对象 对于数组类可以直接转。但对于集合类就必...

  • JavaScript中的JSON

    序列化 stringify() 用于把js对象序列化为JSON字符串 stringify() 除了可以接受对象外,...

  • json

    json.stringify函数将对象和数组序列化为文本。 json.parse函数将json文本以生成内存中对象。

网友评论

      本文标题:JSON 序列化对象出现 $ 符号

      本文链接:https://www.haomeiwen.com/subject/bkzglctx.html