json解析结果部分属性为null的问题

Posted wanshiming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json解析结果部分属性为null的问题相关的知识,希望对你有一定的参考价值。

在协作开发时,从接口获取到的json实体部分为空,但是在调试时发现原对象没有任何问题,但是经过解析成为json后,部分属性变为:

"$ref":"$.*******“

改变解析方式为Gson问题解决,经查是fastjson在解析json时,会将json中相同的内容改为引用导致

 

具体描述如下:

以下内容转自:https://www.cnblogs.com/studyitskill/p/9081608.html

JSONArray  类型  如果我们往里面add数据的时候 如果数据相同,那么就会被替换成 $ref:   也就是被简化了 因为数据一样所直接 指向上一条数据

 

循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。引用是通过$ref标示的,下面介绍一些引用的描述
  • "$ref":".." 上一级
  • "$ref":"@" 当前对象,也就是自引用
  • "$ref":"$" 根对象
  • "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0)

 例如下面这3个银行卡都是建行的,那么就会出现这个问题,因为bank信息完全一致

技术图片

 

因为我们要在前端展示数据 所以这样肯定不对 ,那么如果解决呢

网上都说是加上SerializerFeature.DisableCircularReferenceDetect

1   首先把JSONArray 转成string  这个时候加上SerializerFeature.DisableCircularReferenceDetect

JSONArray.toJSONString(userBankJsonArray, SerializerFeature.DisableCircularReferenceDetect)

2  因为之前是JSON格式的  所以我们还要把string转成JSON

JSONObject.parse(JSONArray.toJSONString(userBankJsonArray, SerializerFeature.DisableCircularReferenceDetect))

然后在传到前端  前端解析就没问题了   

以上是关于json解析结果部分属性为null的问题的主要内容,如果未能解决你的问题,请参考以下文章

Json返回结果为null属性不显示解决方法

Json返回结果为null属性不显示解决

hive 踩坑 get_json_object 返回NULL或部分可解析部分解析不了

JSON 的 Swift 可解码解析部分

Angular 2 - 将 JSON 解析为具有计算属性的类

Gson - 如何在 Kotlin 中解析部分 json