博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Fastjson解析List对象时出现:{"$ref":"$.data[0].task.OBJECTS[0]"}的问题原因及解决方法...
阅读量:5104 次
发布时间:2019-06-13

本文共 1892 字,大约阅读时间需要 6 分钟。

首先,说一下出现问题的原因:后台传过去的json数据用了阿里巴巴的fastjson转换,但是有个问题就是:解析list中引用的数据时,jvm避免数据溢出,会自动处理为“循环引用”,因此,也就出现了问题的根源{"$ref":"$.data[0].task.OBJECTS[0]"},数据以引用的方式传给前台,前台却无法解析到那段引用的数据

循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。

然后,知道了问题的根源,就知道往什么方向解决问题了--禁止循环引用。解决方案如下所示

注:map中存放了你需要传到前台的数据对象:data!并且data中的对象数据存在循环引用。

网上的解决方案:

JSON.toJSONString(list,SerializerFeature.DisableCircularReferenceDetect)

注:不管你是引用JSON,还是JSONObject,主要是看你想传的对象是啥类型,然后转换成JSON / JSONObject

 

下面介绍一些引用的描述:

  1. "$ref":".." 上一级
  2. "$ref":"@" 当前对象,也就是自引用
  3. "$ref":"$" 根对象
  4. "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0)

 

下面是SerializerFeature中的参数类型,感兴趣的同学可以了解一下!(当然,最主要的还是记下来,有备自己以后查看,233 ~:)

QuoteFieldNames,//输出key时是否使用双引号,默认为true

UseSingleQuotes,//使用单引号而不是双引号,默认为false

WriteMapNullValue,//是否输出值为null的字段,默认为false

WriteEnumUsingToString,//Enum输出name()或者original,默认为false

UseISO8601DateFormat,//Date使用ISO8601格式输出,默认为false

WriteNullListAsEmpty,//List字段如果为null,输出为[],而非null

WriteNullStringAsEmpty,//字符类型字段如果为null,输出为"",而非null

WriteNullNumberAsZero,//数值字段如果为null,输出为0,而非null

WriteNullBooleanAsFalse,//Boolean字段如果为null,输出为false,而非null

SkipTransientField,//如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true

SortField,//按字段名称排序后输出。默认为false

@Deprecated

WriteTabAsSpecial,//把\t做转义输出,默认为false

PrettyFormat,//结果是否格式化,默认为false

WriteClassName,//序列化时写入类型信息,默认为false。反序列化是需用到

DisableCircularReferenceDetect,//消除对同一对象循环引用的问题,默认为false

WriteSlashAsSpecial,//对斜杠'/'进行转义

BrowserCompatible,//将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false

WriteDateUseDateFormat,//全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);

NotWriteRootClassName,//暂不知,求告知

DisableCheckSpecialChar,//一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false

BeanToArray //暂不知,求告知

参考了该博文:https://blog.csdn.net/zgz15515397650/article/details/79927483

转载于:https://www.cnblogs.com/4AMLJW/p/4154ljw7896.html

你可能感兴趣的文章
目标、奋斗、技巧
查看>>
如何设计
查看>>
Mr.Jin系统发布报告——WIN7 WIN8双系统下的学习模式系统
查看>>
MAVEN(一)中的Scope
查看>>
ABAP->内表数据下载到CSV格式(原创转载请注明)
查看>>
hdu1316 java解高精度斐波数
查看>>
jquery获取复选框checkbox的值
查看>>
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
查看>>
[个人原创]关于java中对象排序的一些探讨(一)
查看>>
Unix/Linux笔记全集
查看>>
转: Oracle AWR 报告 每天自动生成并发送邮箱
查看>>
让div容器中的图片水平、垂直居中
查看>>
uboot之uboot.lds文件分析
查看>>
10_android打包的过程
查看>>
是懒人创造了方法
查看>>
死锁问题------------------------INSERT ... ON DUPLICATE KEY UPDATE*(转)
查看>>
升级openssh漏洞
查看>>
POJ2117 Electricity
查看>>
学习学习学习
查看>>
数值变量分类问题相关原理知识
查看>>