json对象出现$ref: “$.list[0]“

JSON引用循环错误?`$ref`的解析深度限制配置 JSON引用循环错误解决方案摘要 本文系统分析了Fastjson中$ref字段的生成机制,主要由重复引用、循环引用和自引用三种情况触发。这些引用会导致JSON解析失败、性能下降和数据膨胀等问题。解决方案包括:1)关闭引用检测(简单场景);2)对象关系解耦和DTO模式(中等复杂度);3)深度复制方案(复杂场景)。文章还针对树形结构和图形数据提供了特殊处理建议,并给出了分层序列化、配置策略和监控告警等最佳实践。性能测试显示关闭引用检测可提升20%左右的序列化速度。 阅读详情

背景

和一个第三方系统做数据同步,客户在本系统填写表单后,在保存时做数据同步,由于没有引入mq也没有其他异步通知,所以通过实时接口进行数据对接。数据交互格式是JSON数组,数组内的一个大对象,里面包含若干属性,一个小对象,还有一个对象集合。

问题

在调用接口时,将日志打印,发现JSON数组内的第一条大对象,里面包含的内容打印一切正常,但是当第二个对象开始,在小对象还有对象集合的时候出现了特殊符号:

$ref: "$.list[0]" 和 “$ref”:”$.children.0”

分析

刚开始以为是数据问题,但是数据库中不可能存在这种问题,然后搜索排查一下:
原来,使用fastjson会出现循环引用。

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

引用是通过$ref标示的,下面介绍一些引用的描述

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

解决办法:

自己在转JSON的时候,新增策略,使其禁止循环引用。
通过SerializerFeature.DisableCircularReferenceDetect
来消除对同一对象循环引用的问题,默认为false。

样例代码:

List<XXX> aaa= xxxxMapper.getxxxsByoId(id);
JSONArray arr = JSONArray.parseArray(JSON.toJSONString(aaa));
List<XXX> list= JSON.parseArray(convert(arr),XXX.class);
    public String convert(JSONArray array){
        return JSON.toJSONString(array, SerializerFeature.DisableCircularReferenceDetect);
    }
Javaweb开发中JSON把引用相同的对象变为"$ref":问题的分析与解决 参考文档来源:https://blog.csdn.net/qq_37953002/article/details/101448761 人吧,工作久了发现自己会的越来越少,现在会的可能还不如刚毕业的时候了。刚毕业时候的干劲也没了。诶,要过年了,感慨一下。 最近开发的时候,发现页面获取的数据比后台查到的少了一条,真是奇怪。根本不知道为什么啊,就去找原因,后来还是牛逼的同事一语中的,告诉我原因。因为... 阅读详情

相关推荐

JSON 中的 $ref 问题及 DisableCircularReferenceDetect 解析

循环引用无法被正确处理:在序列化时禁用循环引用检测,虽然避免了异常,但却损失了原有对象间的引用关系。数据结构完整性受损:反序列化后无法恢复对象间的完整关系,导致friend属性为null。

weixin_44424997的博客 523

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

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

weixin_33918114的博客 685

差分分析.

差分分析是一种强大的密码攻击技术,通过研究明文差分与密文差分的关系来破解加密算法。本文系统介绍了差分分析的核心概念和方法: 基础差分分析:通过异或运算抵消密钥影响,利用差分分布表(DDT)寻找高概率差分特征,以FEAL-4为例展示了具体攻击过程。 高级差分技术:包括截断差分分析(关注部分特征)、不可能差分分析(排除概率为0的路径)和飞来去器分析(将算法分段处理)。 自动化搜索方法:介绍了松井算法和MILP(混合整数线性规划)方法,将差分路径搜索转化为数学优化问题。 这些方法展现了差分分析从基础理论到现代应用

weixin_61562383的博客 786

返回json对象结果中带有$ref,解决方法

大概率是因为返回的内容中有重复的数据,重复的数据指向同一个引用。2.将得到的json字符串在转回json对象。1.将json对象对象转化为json字符串。

zy13754565244的博客 3013

华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理工具

参考文档1这个工具可以完美替代华硕奥创中心工具,可以定制化不同模式下的CPU、GPU、风扇转速、电池计划等。是由华硕开发人员开发的一个纯绿色的系统管理工具。直接展示启动后的工具界面效果图:这个工具也可以一键式停止正在运行的华硕ASUS服务,减少不必要的资源消耗。

追梦&天空的博客 1万+

Spring AI Alibaba实战训练营-20 基于注解驱动的MCP快速开发入门指南

本文详细讲解如何使用SpringAiAlibaba快速开发基于注解驱动的MCP应用。文章详细介绍了MCP协议并且重点介绍了Spring AI通过注解驱动的开发方式简化MCP服务开发。具体包括服务端和客户端的注解使用、城市最新时间查询MCP项目结构概览(服务端和客户端模块)以及环境配置要求。

program哲学 295

JSON 转为json串后出现 “$ref“

转为JSON 串时出现 "$ref":"$.RequestParam.list[0]"

sszdzq的博客 1550

SAP PCE 到底有没有 AI 能力:从标准功能、Joule、ABAP 扩展到项目落地的完整解读

摘要:SAP S/4HANA Cloud Private Edition(PCE)已深度集成AI能力,主要体现在三个方面:1)标准业务流程中的AI辅助功能(如财务分录生成、维修单据处理);2)通过Joule提供的自然语言交互入口,支持业务导航和部分事务处理;3)开发者可通过ABAP AI SDK与BTP平台集成实现扩展。PCE不是独立AI平台,企业级自定义AI需结合SAP BTP实现。AI能力已深度融入财务、制造等业务场景,但关键业务仍需人工审核。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 330

解析json对象出现$ref: "$.list[0]"的解决办法

本文介绍了前端解析json时候出现$ref: "$.list[0]"的解决方案和问题分析

Frankenstein的博客 6万+

使用 MATLAB/Simulink 对风光互补发电系统进行建模

随着全球对清洁能源的需求日益增长,风力发电和光伏发电作为两种主要的可再生能源形式,在电力供应中的占比越来越高。然而,由于风电和光伏的间歇性和不确定性,单独依赖其中任何一种能源都会给电网带来挑战。因此,风光互补发电系统(Wind-PV Hybrid System)应运而生,通过合理配置风力发电机和光伏电池板的数量,可以有效提高系统的稳定性和可靠性。此外,为了确保整个电力系统的安全稳定运行,还需要研究风光互补发电系统与主网之间的协调调度策略。本教程将详细介绍如何使用。

amy_mhd的博客 117

【入坑存内计算一键指南】存内计算运算原理:算法优化、存储介质探究

本文探讨了存内计算及其面向的架构优化,尤其侧重于图算法优化和存内计算存储介质。文章介绍了存内计算的概念和意义,着重强调了存内计算解决了内存墙问题,提高了计算效率。针对图算法的优化,提出了基于位运算的创新方法,重塑了单源最短路径算法,并介绍了基于局部重叠度的链路预测算法优化设计。接着,文章详细讨论了存内计算存储介质,特别是非易失性存储器,比较了不同类型存储器的性能,并重点介绍了基于ReRAM的存内计算技术,包括其物理模型和交叉阵列结构。

一键难忘的博客 7064

解决返回的json对象出现$ref: "$.list[0]"

问题的原因是出现了循环引用。 循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。 引用是通过$ref 标识: "$ref":".." 上一级 "$ref":"@" 当前对象,也就是自引用 "$ref":"$" 根对象 "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0) 推荐使用的解决办...

han0373的博客 2997

SolidWorks速成教程P1——简介及基础操作

SolidWorks教程P1——简介及基础操作

嵌入式阿齐Archie 2万+

Fastjson解析json对象出现$ref: “$.list[0]“的解决办法

今天定义了一个JSONObject对象,引用的com.alibaba.fastjson.JSONObject,循环给这个对象赋值出现"$ref":"$[0]"现象, /** * fastjson中$ref对象重复引用问题 * * 介绍: * FastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来关闭引用检测。 * 关闭引用检测后,重复引用对象时就不会被$ref代替,但是在循环引用时也会导致StackOverf

Crystalqy的博客 893

[QMT量化交易小白入门]-七十六、从tick数据中获取高频交易的量价背离信号

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 790

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

解析json对象出现$ref: “$.list[0]“的解决办法

问题介绍 :A是一个集合,集合中是一个个的对象,B引用了A,C也引用了A,在将B和C放到map中返回给前端的时候,发现map后面的一个对象一直解析不出值都是$ref: “$.list[0]这种。 理解:java程序将这种情况自动处理为“循环引用”,而出现循环引用,fastjson就会把该对象解析成引用,数据以引用的方式传给前端,前端自然无法解析出这种引用的数据。 解决方法 尽量的从代码入手,检查自己的代码,避免这种情况产生 在返回给前端数据之前,在解析时设置一个值 String s = JSO

weixin_51468628的博客 1663

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

使用fastjson解析json对象出现$ref: "$.list[0]"的解决办法

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

大白能的博客 2479

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

json解析List对象时出现$ref: “$.list[0]“的问题原因及解决方法

1. 遇到的问题: 在解析List时,List的对象中又包含了一个对象。然后使用JSON.toJSONString(List<>); 就出现了问题如下: "tokenDTO": { "$ref": "$.balanceList[1].tokenDTO" }, 然后,百度了一下,出现”ref":".balanceList[1].tokenDTO”就是循环引用造成的。 循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。 注:按我的理解,之所以出现循环引用,主...

FurtherSkyQ的博客 3294

解析json对象出现$ref: "$.list[0]"的解决办法(转)

问题描述: 今天在做后台传数据到前端解析的时候遇到了这个问题。背景介绍下:后台传过去json数据是用阿里的fastjson转换的,调用的是这个方法 String s = JSON.toJSONStringWithDateFormat(o,dateformat,SerializerFeature.WriteDateUseDateFormat); ServletActionContext.getRes...

莎莎的专栏 1729

json数据出现$ref: "$.list[0]"的解决办法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34235371的博客 607

使用Fastjson解析List对象时出现$ref: “$.list[0]“的问题原因及解决方法

1. 遇到的问题: 在解析List时,List的对象中又包含了一个对象。然后使用JSON.toJSONString(List<>); 就出现了问题如下:"tokenDTO": { "$ref": "$.balanceList[1].tokenDTO" }, 然后,百度了一下,出现”ref":"ref":".balanceList[1].tokenDTO”就是循环引用造成的。 循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。 2. 原因: $ref 标示的,下

任意门的博客 1143
上一篇: MySQL使用行号分页
下一篇: 近期bug修复及开发问题小结
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值