ChatGPT:使用FastJSON库关闭JSON引用检测的方法

ChatGPT:使用FastJSON库关闭JSON引用检测的方法



下面我将输入一个方法,请你记住:
ChatGPT:
好的,请输入方法。

@RequestMapping("/getLianZhengLabels")
public String getLianZhengLabels() {HashMap<String, Object> res = new HashMap<>();List<HashMap<String, Object>> hashMaps = new ArrayList<>();QueryWrapper<Label> wrapper1 = new QueryWrapper<>();wrapper1.orderByAsc("l_id");wrapper1.eq("l_level", 0);List<Label> firstLabels = labelMapper.selectList(wrapper1);QueryWrapper<Label> wrapper2 = new QueryWrapper<>();wrapper2.orderByAsc("l_id");wrapper2.eq("l_level", 1);List<Label> secondLabels = labelMapper.selectList(wrapper2);QueryWrapper<Label> wrapper3 = new QueryWrapper<>();wrapper3.orderByAsc("l_id");wrapper3.eq("l_level", 2);List<Label> thirdLabels = labelMapper.selectList(wrapper3);for (Label firstLabel : firstLabels) {HashMap<String, Object> firstMap = new HashMap<>();firstMap.put("value", firstLabel.getL_text());firstMap.put("label", firstLabel.getL_text());List<HashMap<String, Object>> firstChildren = new ArrayList<>();for (Label secondLabel : secondLabels) {if (secondLabel.getL_parent_id().equals(firstLabel.getL_id())) {HashMap<String, Object> secondMap = new HashMap<>();secondMap.put("value", secondLabel.getL_text());secondMap.put("label", secondLabel.getL_text());List<HashMap<String, Object>> secondChildren = new ArrayList<>();for (Label thirdLabel : thirdLabels) {if (thirdLabel.getL_parent_id().equals(secondLabel.getL_id())) {HashMap<String, Object> thirdMap = new HashMap<>();thirdMap.put("value", thirdLabel.getL_text());thirdMap.put("label", thirdLabel.getL_text());secondChildren.add(thirdMap);}}secondMap.put("children", secondChildren);firstChildren.add(secondMap);}}firstMap.put("children", firstChildren);hashMaps.add(firstMap);}List<HashMap<String, Object>> em_tags = new ArrayList<>();List<HashMap<String, Object>> ad_tags = new ArrayList<>();List<HashMap<String, Object>> di_tags = new ArrayList<>();List<HashMap<String, Object>> in_tags = new ArrayList<>();List<HashMap<String, Object>> ma_tags = new ArrayList<>();for (HashMap<String, Object> item : hashMaps) {if (item.get("label").equals("职务")) {em_tags.add(item);ad_tags.add(item);di_tags.add(item);}if (item.get("label").equals("基本信息")) {em_tags.add(item);ad_tags.add(item);di_tags.add(item);ma_tags.add(item);}if (item.get("label").equals("金融消费")) {in_tags.add(item);}if (item.get("label").equals("资产")) {in_tags.add(item);}if (item.get("label").equals("行为轨迹")) {in_tags.add(item);}if (item.get("label").equals("社交网络")) {in_tags.add(item);}}res.put("tags", hashMaps);res.put("em_tags", em_tags);res.put("ad_tags", ad_tags);res.put("di_tags", di_tags);res.put("in_tags", in_tags);res.put("ma_tags", ma_tags);return JSON.toJSONString(res);}
ChatGPT:
好的,我已经记录下了这段代码。这是一个使用Spring MVC框架中的@RequestMapping注解定义的控制器方法,其作用是获取标签信息。该方法使用了MyBatis-Plus提供的QueryWrapper构造器来构造查询条件,查询数据库中不同层级的标签列表。然后通过嵌套循环,将查询结果整理成一个层级嵌套的HashMap对象,最后返回一个JSON格式的字符串。在整理过程中,还根据标签的不同类型将其分类存储到不同的List中。

这段代码的输出结果
"ad_tags":[{"children":[{"children":[{"label":"金融","value":"金融"}"em_tags":[{"$ref":"$.ad_tags[0]"},{"$ref":"$.ad_tags[1]"}
为什么ad_tags和em_tags不一样
ChatGPT:
根据代码中的逻辑和输出结果,可以看出这个问题是由于在循环整理标签信息的过程中,对不同类型的标签进行了不同的处理所导致的。
具体来说,ad_tags、di_tags和em_tags这三个List对象在循环整理标签信息的过程中都被添加了同样的元素,即职务和基本信息这两个标签。而ma_tags则只包含基本信息这个标签。而in_tags则只包含金融消费、资产、行为轨迹和社交网络这些标签。这些元素的添加方式是通过遍历整理好的hashMaps List对象来实现的。
由于在整理标签信息时,将hashMaps中的元素按照标签类型添加到了不同的List中,因此当在输出结果中引用em_tags时,其中包含了ad_tags和di_tags中的内容,而ma_tags和in_tags则与这三个List没有任何关系。这也是输出结果中em_tags和ad_tags不一样的原因。
需要注意的是,输出结果中的"$ref"属性是JSON中的引用类型,用于引用JSON中已经存在的数据。在这个例子中,“$ref”:“$.ad_tags[0]“表示该元素引用了ad_tags中的第一个元素,”$ref”:"$.ad_tags[1]"表示该元素引用了ad_tags中的第二个元素。这种引用方式可以减少JSON的重复,提高数据的利用效率。

怎么能关闭这种引用方式
ChatGPT:
在这段代码中,使用了JSON库将Java对象转换为JSON字符串。默认情况下,JSON库会检测并尝试去除重复的对象,将其转换为一个引用,以减小JSON字符串的大小。这种引用方式在某些情况下可能会导致问题,因此可以通过设置JSON库的配置选项来关闭它。
具体而言,如果使用的是FastJSON库,可以通过设置SerializerFeature.DisableCircularReferenceDetect选项来关闭引用检测,如下所示:
JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);
如果使用的是Jackson库,可以通过在对象的属性上添加@JsonIdentityInfo注解来指定引用的生成方式,如下所示:
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class MyClass {private int id;private MyClass parent;private List<MyClass> children;// getters and setters
}
其中,generator参数指定了引用的生成方式,这里使用了PropertyGenerator,它将根据对象的id属性来生成引用。property参数指定了对象的标识属性名,即id。
总之,具体要如何关闭引用方式,取决于所使用的JSON库和具体的使用场景。

我使用的是com.alibaba.fastjson
ChatGPT:
如果你使用的是 Alibaba FastJSON 库,则可以使用以下方法关闭引用检测:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;// ...String jsonString = JSON.toJSONString(yourObject, SerializerFeature.DisableCircularReferenceDetect);
在使用 toJSONString() 方法时,将 SerializerFeature.DisableCircularReferenceDetect 作为第二个参数传入,即可关闭引用检测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/89335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes(K8s):未来云原生应用的引擎

文章目录 Kubernetes的核心概念和架构为什么K8s是构建云原生应用的首选工具&#xff1f;云原生应用的好处和挑战容器编排的重要性&#xff1a;Docker和KubernetesKubernetes生态系统&#xff1a;核心组件和附加工具实际应用&#xff1a;企业如何在生产环境中使用K8s未来展望&am…

rust trait对象

在拥有继承的语言中&#xff0c;可以定义一个名为shape的基类&#xff0c;该类上有一个draw方法。其他的类比如Button、SelectBox继承shape。它们各自覆盖draw方法。调用这些子类的draw方法时&#xff0c;就可以把它们统一当作shape来使用。不过Rust并没有继承&#xff0c;如果…

做一个贪吃蛇小游戏happy一下

直接Vue上代码 <template><div><div>贪吃蛇</div><canvas id"canvas" width"400" height"400"></canvas></div> </template><script> export default {data() {return {ctx: null,inter…

Android 遍历界面所有的View

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、实践四、 推荐阅读 一、导读 我们…

结构型设计模式——组合模式

摘要 组合模式(composite pattern): 允许你将对象组合成树形结构来表现"整体/部分"层次结构. 组合能让客户以一致的方式处理个别对象以及对象组合。 一、组合模式的意图 将对象组合成树形结构来表示“整体/部分”层次关系&#xff0c;允许用户以相同的方式处理单独…

AVL Cruise 2020.1 安装教程

文章目录 安装包安装破解 安装包 链接&#xff1a;https://pan.baidu.com/s/1GxbeDj_SyvKFyPeTsstvTQ?pwd6666 提取码&#xff1a;6666 安装 安装文件&#xff1a; 双击setup.exe&#xff1a; 一直netx&#xff0c;中间要修改两次路径&#xff0c;第一次是安装位置&#xf…

Flume最简单使用

文章目录 一、简介1、定义2、基础架构 二、快速入门1、解压Flume2、案例一&#xff1a;监控端口号3、案例二&#xff1a;将空目录下文件 三、Flume进阶1、Flume事务2、Flume Agent内部原理3、案例一&#xff1a;监控日志4、案例二&#xff1a;多路复用和拦截器适应4.1 原理4.2 …

二进制十六机制CRC总和异或等工具类

package com.dc.util;import org.apache.http.util.TextUtils; import java.nio.ByteBuffer; import

LCP 06. 拿硬币/2582. 递枕头[java]

LCP 06. 拿硬币 - 力扣&#xff08;LeetCode&#xff09; 桌上有 n 堆力扣币&#xff0c;每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆&#xff0c;拿走其中的一枚或者两枚&#xff0c;求拿完所有力扣币的最少次数。 示例 1&#xff1a; 输入&#xff1a;[4,2,1…

Linux部署elk日志监控系统

目录 一、简介 二、部署elasticsearch 2.1 安装jdk11&#xff08;jdk版本>11&#xff09; 2.2 下载安装包 2.3 授权elk用户 2.4 配置elasticsearch.yml 2.5 启动elasticsearch 三、部署logstash 3.1 启动测试 3.2 可能出现的报错 3.3 指定配置文件启动logstash 3.4 安装El…

Ubuntu 设置开机自动执行脚本

1. 建立service文件 sudo vim /etc/systemd/system/redis-server.service2. redis service文件 [Unit] DescriptionAdvanced key-value store Afternetwork.target Documentationhttp://redis.io/documentation, man:redis-server(1)[Service] Typenotify ExecStart/usr/bin/…

MySQL数据库管理

一、sql语句&#xff1a; SQL语句用于维护管理数据库&#xff0c;包括数据查询、数据更新、访问控制、对象管理等功能。 二、SQL语言分类&#xff1a; DDL&#xff1a;数据定义语言&#xff0c;用于创建数据库对象&#xff0c;如库、表、索引等 DML&#xff1a;数据操纵语言&a…

Win/Mac版Scitools Understand教育版申请

这里写目录标题 前言教育版申请流程教育账号申请 前言 上篇文章为大家介绍了Scitools Understand软件&#xff0c;通过领取的反馈来看有很多朋友都想用这个软件&#xff0c;但是我的网盘里只存了windows的pojie版&#xff0c;没有mac版的&#xff0c;我没有去网上找相关的资源…

js中的类型转换

原文地址 JavaScript 中有两种类型转换&#xff1a;隐式类型转换&#xff08;强制类型转换&#xff09;和显式类型转换。类型转换是将一个数据类型的值转换为另一个数据类型的值的过程。 隐式类型转换&#xff08;强制类型转换&#xff09;&#xff1a; 隐式类型转换是 Java…

Numpy入门

文章目录 1. Ndarray的5种重要属性2. Ndarray的7种创建方法3. 类型转换和等比/差数列4. Numpy的8种内置方法5. Numpy 数学运算 主要内容 Ndarray的5种重要属性 nd.ndim Ndarray的维度nd.shape Ndarray的行列数nd.size Ndarray的元素数nd.dtype Ndarray元素类型nd.itemsize Nda…

变量、常量以及与其他语言的差异 - Go语言从入门到实战

知识点 源码文件以_test结尾&#xff1a;xxx_test.go测试方法名以Test开头&#xff1a;func TestXXX(t *testing.T){…} 利用单元测试来写代码段&#xff0c;保存之后会自动运行程序返回结果&#xff0c;可以快速实践得到反馈。 编写测试程序 接下来练习一下&#xff0c;怎…

Unity下tga和png格式图片打包成AB包大小和加载速度测试

测试素材 测试素材&#xff0c;一张tga格式&#xff0c;一张png格式&#xff0c;他们的图像尺寸一样都是8K图。 两张图在AssetBundles里显示 Tga格式的图明显大很多&#xff0c;我们打包成ab包看看。 在PC 打包后看&#xff0c;明显大小一样&#xff0c;我们进行ab包加载&am…

传统订货方式和网上企业APP订货方式的差别|网站搭建|小程序开发

传统订货方式和网上企业APP订货方式的差别|网站搭建|小程序开发 1、管货品&#xff1a;实时关注热销和滞销商品的库存订货系统&#xff1a;采购单一键生成入库单&#xff0c;便捷的实现从采购到仓库到销售一体化的进销存管理。 传统模式&#xff1a;进销存管理难&#xff1a;…

机器学习,深度学习

一 、Numpy 1.1 安装numpy 2.2 Numpy操作数组 jupyter扩展插件&#xff08;用于显示目录&#xff09; 1、pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple 2、pip install jupyter_nbextensions_configurator -i https://pypi.tuna.t…

destoon 调用第三方api接口

调用企查查企业工商信息接口为例&#xff1a; 在 \api\extend.func.php 文件下 注意&#xff1a;有注释内容可能接口无法访问 function select_list($k){$query_data array(key>,keyword>$k);$url "https://api.qichacha.com/ECIV4/GetBasicDetailsByName?&q…