fastjson 重复引用和循环引用问题

泛型沙漏
• 阅读 8587

数据传输使用json格式再方便不过了。
fastjson 由阿里巴巴那伙人使用Java语言编写,号称最快的JSON库
前两天遇到一个问题 后台的数据转化为json字符串后发送到前台出现了$ref字样的东西,后来明白了这是引用,在传输的数据中出现相同的对象时,fastjson默认开启引用检测将相同的对象写成引用的形式.
说到引用分为两种,重复引用和循环引用

重复引用

指一个对象重复出现多次

循环引用

指你心里有我,我心里有你(互相引用),这个问题比较严重,如果处理不好就会出现StackOverflowError异常

重复引用的解决方法;

1.单个关闭 JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);
2.全局配置关闭 JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();

循环引用的解决方法:

1.如果你前端用不到这个属性在该属性的get方法上加上注解@JSONField(serialize=false),
  这样该属性就不会被序列化出来,这个也可以解决重复引用
2.修改表结构,出现循环引用了就是一个很失败的结构了,不然准备迎接StackOverflowError异常。


点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
java 复制Map对象(深拷贝与浅拷贝)
java复制Map对象(深拷贝与浅拷贝)CreationTime2018年6月4日10点00分Author:Marydon1.深拷贝与浅拷贝  浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象
Wesley13 Wesley13
4年前
java与unity3d通信之json
java与unity3d项目中用的json作为基础通信的数据格式,java后端,json库那是一个泛滥,一直喜欢阿里的fastjson,强大、快速、容易上手。Unity用的最新版本,其自带的json库感觉太弱了,于是在网上找了个Newtonsoft.Json库,这个在C上用的比较多吧,不过粗略使用,不得不感叹,C处理json弱爆了,当然,可能是很强大
Wesley13 Wesley13
4年前
java后台接收json数据,报错com.alibaba.fastjson.JSONObject cannot be cast to xxx
  从前台接收json封装的list数据,在后台接收时一直报错,com.alibaba.fastjson.JSONObjectcannotbecasttoxxx,  使用这种方式接收可以接收1@RequestMapping(value"/insertUser",methodRequestMethod.POST)
Wesley13 Wesley13
4年前
FastJson、Jackson、Gson进行Java对象转换Json的细节处理
Java对象转换Json的细节处理前言Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式一、fastJson1、fastJson在转换java对象为json的时候,默认是不序列化nu
Easter79 Easter79
4年前
SpringBoot学习之路:06.Spring Boot替换默认的Jackson
    SpringBoot和Springmvc都可以返回接送数据,SpringBoot默认是使用Jackson解析json数据的,个人觉得阿里的Fastjson性能更好点,API使用更方便,于是将SpringBoot默认的Jackson替换成阿里的Fastjson。一.配置类注入的方式packagecom.maxbill.core.
Stella981 Stella981
4年前
Fastjson的基本使用方法大全
fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果说明比gson快大约6倍下面将讲解所有大部分fastjson用法和转换:1,Fastjson中的经常调用的方法:1publicstaticfinalObjectparse(Stringtext);  /
Stella981 Stella981
4年前
SpringBoot学习之路:06.Spring Boot替换默认的Jackson
    SpringBoot和Springmvc都可以返回接送数据,SpringBoot默认是使用Jackson解析json数据的,个人觉得阿里的Fastjson性能更好点,API使用更方便,于是将SpringBoot默认的Jackson替换成阿里的Fastjson。一.配置类注入的方式packagecom.maxbill.core.
Stella981 Stella981
4年前
FastJSON JSONObject 字段排序 Feature.OrderedField
packagecn.tongdun.robot.web;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.TypeReference;importcom.alibaba.fastjson.parser.Feature;
Stella981 Stella981
4年前
AspNetCore Json序列化设置
AspNetCore中的Json序列化处理已经默认使用_Newtonsoft.Json_库了...比如像MVC中:publicI不过使用过程中会发现一些问题,其实这算默认设置吧:Json序列化后的字段格式会变成小驼峰形式Json序列化时的日期时间格式化没有处理循环引用的问题,比如EntityF
Stella981 Stella981
4年前
FastJson 反序列化注意事项
问题描述使用fastJson对json字符串进行反序列化时,有几个点需要注意一下:反序列化内部类反序列化模板类0\.Getter/Setter问题如我们希望返回的一个json串为"name":"name","isDeleted":true,"isEmpty":1
Wesley13 Wesley13
4年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ