当前位置: 首页 > news >正文

JSONObject 比 Map好使的地方

需求:改originalJson中的json字符串的key,当key满足在configMapping中配置的key2情况的时候,把originalJson的key改成 configMapping中的value2。

上代码:

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;public class JsonKeyExtractor {public static void main(String[] args) {// 原始键值映射 key valueJSONObject originalJson = new JSONObject();originalJson.put("accountStatuses1","accountStatuses_test");originalJson.put("marketplaceId1","marketplaceId_test");originalJson.put("performanceMetrics1","performanceMetrics_test");// 要进行替换的键值映射 key2 value2JSONObject configMapping = new JSONObject();configMapping.put("accountStatuses1", "accountStatuses");configMapping.put("marketplaceId1", "marketplaceId");configMapping.put("performanceMetrics1", "performanceMetrics");// 调用递归函数进行键替换replaceKeys(originalJson, configMapping);// 输出替换后的 JSONSystem.out.println(originalJson.toString());}// 递归替换函数private static void replaceKeys(JSONObject jsonObject, JSONObject keyMapping) {for (String key:jsonObject.keySet()){if (keyMapping.containsKey(key)) {// 如果键需要替换,进行替换String replacementKey = keyMapping.get(key).toString();jsonObject.put(replacementKey, jsonObject.get(key));jsonObject.remove(key);replaceKeys(jsonObject, keyMapping);//立刻return重跑,否则修改了json结构,下一轮for就报错。return;}if (jsonObject.get(key) instanceof JSONObject) {// 如果值是 JSONObject,递归调用replaceKeys(jsonObject.getJSONObject(key), keyMapping);} else if (jsonObject.get(key) instanceof JSONArray) {// 如果值是 JSONArray,遍历数组中的元素JSONArray jsonArray = jsonObject.getJSONArray(key);for (int i = 0; i < jsonArray.size(); i++) {if (jsonArray.get(i) instanceof JSONObject) {// 如果数组元素是 JSONObject,递归调用replaceKeys(jsonArray.getJSONObject(i), keyMapping);}}}}}
}

输出:

{
    "performanceMetrics":"performanceMetrics_test",
    "accountStatuses":"accountStatuses_test",
    "marketplaceId":"marketplaceId_test"
}

假设用的不是JSONObject而是Map,这个方法就不是这么好写了。

比如:

package cn.net.cdsz.ccb.test;import club.newepoch.utils.JsonUtils;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;public class JsonKeyReplacementDemo {public static void main(String[] args) {// 创建一个 JSON 对象Map<String, Object>  jsonObject = new HashMap<>();jsonObject.put("name", "John");jsonObject.put("age", "30");// 创建一个键的映射关系Map<String, String>  keyMapping = new HashMap();keyMapping.put("name", "fullName");// 调用替换函数replaceKeys(jsonObject, keyMapping);// 打印替换后的 JSON 对象System.out.println(JsonUtils.toJSONString(jsonObject));}public static void replaceKeys(Map<String, Object> jsonObject, Map<String, String> keyMapping) {for (String key : new HashSet<>(jsonObject.keySet())) {if (keyMapping.containsKey(key)) {// 如果键需要替换,进行替换String replacementKey = keyMapping.get(key);jsonObject.put(replacementKey, jsonObject.get(key));jsonObject.remove(key);}String value = jsonObject.get(key).toString();if (value != null && value.startsWith("{")) {// 如果值是 JSON 格式的字符串,解析为 MapMap<String, Object> innerJsonData = parseJsonString(value);replaceKeys(innerJsonData, keyMapping);jsonObject.put(key, toJsonString(innerJsonData));}}}// 解析 JSON 字符串为 Mapprivate static Map<String, Object> parseJsonString(String jsonString) {// 此处需要使用 JSON 解析库来实现解析过程// 这里仅为示例,需要替换为实际的 JSON 解析方法// 你可以使用其他 JSON 解析库来解析 JSON 字符串为 Mapreturn null;}// 将 Map 转换为 JSON 字符串private static String toJsonString(Map<String, Object> jsonData) {// 此处需要使用 JSON 序列化库来实现转换过程// 这里仅为示例,需要替换为实际的 JSON 序列化方法// 你可以使用其他 JSON 序列化库来将 Map 转换为 JSON 字符串return null;}
}

这样用Map是非常不方便的

相关文章:

JSONObject 比 Map好使的地方

需求&#xff1a;改originalJson中的json字符串的key&#xff0c;当key满足在configMapping中配置的key2情况的时候&#xff0c;把originalJson的key改成 configMapping中的value2。 上代码&#xff1a; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject;p…...

[js] 图解 event.pageX event.clientX event.offsetX getBoundingClientRect

event.clientX、event.clientY 鼠标相对于浏览器窗口可视区域的X&#xff0c;Y坐标&#xff08;窗口坐标&#xff09;&#xff0c;可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性 event.pageX、event.pageY 类似于event.clientX、event.clientY&#xff0c;…...

VsCode备忘

上次简单学习了一下vscode的使用&#xff0c;结果好长时间没用&#xff0c;今天打开又全忘了。。。再记录一下吧 快捷键 CtrlShiftP 命令面板&#xff0c;查找命令&#xff0c;设置等等 Ctrl 打开集成终端&#xff0c;监视生成输出 Ctrl, 打开设置 CtrlP 转到文件,使用转到符…...

Linux命令200例:Yum强大的包管理工具使用(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…...

使用 Linux 相关知识部署博客系统

目录 ​编辑一、认识 Linux 二、如何拥有 Linux 环境 三、常见的 Linux 命令 1、目录相关命令 &#xff08;1&#xff09;ls &#xff08;2&#xff09;pwd &#xff08;3&#xff09;cd 2、文件操作相关命令 &#xff08;1&#xff09;touch &#xff08;2&#xf…...

Linux--进程--vfork与fork区别

vfork&#xff1a; 所需头文件&#xff1a;#include <sys/types.h> #include <unistd.h> pid_t vfork(void); 功能&#xff1a; vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程&#xff0c;但它们创建的子进程是有区别的。 参数&#xff…...

Ubuntu系统重装nvidia gpu驱动

1. 卸载原驱动 sudo apt remove *cuda* sudo apt remove *nvidia* sudo /usr/bin/nvidia-uninstall sudo dpkg -l | grep ^rc | cut -d -f3 | sudo xargs dpkg --purge sudo rm -rf ~/.cuda-license-* sudo apt purge nvidia-cuda-toolkit sudo apt remove nvidia-driver-* s…...

Java + Selenium + Appium自动化测试

一、启动测试机或者Android模拟器&#xff08;Genymotion俗称世界上最快的模拟器&#xff0c;可自行百度安装&#xff09; 二、启动Appium&#xff08;Appium环境安装可自行百度&#xff09; 三、安装应用到Genymotion上&#xff0c;如下图我安装一个计算机的小应用&#xff…...

【sgLazyCascader】自定义组件:基于el-cascader的懒加载级联菜单,支持异步加载子级菜单

sgLazyCascader源码 <template><div :class"$options.name"><el-cascader :props"props" v-model"model" :placeholder"placeholder || 请选择" :options"options"></el-cascader></div> &l…...

2023高教社杯数学建模E题思路模型 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c; 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…...

一、Linux下常用的压缩格式

一、Linux下常用的压缩格式 ​ Linux下常用的压缩扩展名有&#xff1a;.tar、.tar.bz2、.tar.gz。 二、Windows下7ZIP软件的安装 ​ 因为Linux下很多文件是.bz2&#xff0c;.gz结尾的压缩文件&#xff0c;因此需要在windows下安装7ZIP软件。 三、gzip压缩工具 .gzip工具负…...

MySQL 查询 - 排除某些字段的SQL查询,提升查询性能

序言 某些时候&#xff0c;需要查询拥有很多很多字段的表&#xff0c;但是查询表时&#xff0c;其中有一些不需要查询的字段&#xff0c;会增加查询的负担&#xff0c;所以这时候&#xff0c;就需要排除这些冗余的字段&#xff0c;指定需要的字段查询&#xff0c;提升查询性能…...

国产信创服务器如何进行安全可靠的文件传输?

信创&#xff0c;即信息技术应用创新&#xff0c;2018年以来&#xff0c;受“华为、中兴事件”影响&#xff0c;国家将信创产业纳入国家战略&#xff0c;并提出了“28n”发展体系。从产业链角度&#xff0c;信创产业生态体系较为庞大&#xff0c;主要包括基础硬件、基础软件、应…...

ARTS第五周:S - 数据编织 Data fabric

Brife ​数据编织/数据经纬&#xff08;Data Fabric&#xff09;是一种新型的数据管理和治理方法&#xff0c;旨在连接和整合所有数据源和数据目标&#xff0c;实现数据的无缝移动和访问。它是一种跨平台、跨云、跨技术的解决方案&#xff0c;可以连接各种类型的数据&#xff0…...

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程

详情点击链接&#xff1a;基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程 一&#xff0c;空间数据获取与制图 1.1 软件安装与应用 1.2 空间数据 1.3海量空间数据下载 1.4 ArcGIS软件…...

Spring Boot 介绍

Spring Framework的发展和Spring Boot Spring 3 支持Java注解Spring 4 支持 Java 8, 同时推出Spring Boot Spring Boot 简化了Spring配置。Spring Boot是什么? Boot 翻译有靴子,启动的意思, 在计算机领域有引导的意思, 比如计算机启动引导或是Linux 的引导程序。 Spring B…...

mysql基于AES_ENCRYPTAES_DECRYPT实现密码的加密与解密

1.直接使用AES_ENCRYPT&&AES_DECRYPT函数导致的问题。 执行语句 select AES_ENCRYPT(cd123,key) 结果 加密过后的字符串是一串很奇怪的字符。 尝试使用上面加密过后的字符解密。 select AES_DECRYPT(u5£d|#,key) 结果 并未成功的解密 2.解决办法 使用 hex(…...

怎么把pdf转换成jpg图片?

怎么把pdf转换成jpg图片&#xff1f;在工作中&#xff0c;如果我们收到无法修改编辑的PDF文件&#xff0c;可能会遇到一些困难。尤其是当平台或网站只支持JPG图片格式&#xff0c;而领导又要求我们将pdf文件改为JPG格式时&#xff0c;情况就更为棘手了。这对于我们打工一族来说…...

计算机脚本的概念,如何编写、使用脚本 (Script)?

一、脚本的概念和使用场景 在计算机领域的脚本&#xff0c;指的是使用一种特定的描述性语言&#xff0c;依据一定的格式编写的可执行文件脚本语言又被称为扩建的语言或者动态语言, 是一种编程语言, 用来控制软件应用程序, 脚本通常是以文本 (ASCⅡ) 保存, 只是在被调用时进行解…...

c语言 5.0

&#x1f482; 个人主页: 程序员爱摸鱼&#x1f91f; 版权: 本文由【程序员爱摸鱼】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注点赞收藏(一键三连)哦&#x1f485; 想寻找共同成长的小伙伴&#xff0c;可以互粉哦 &#x1f4ac;文章目录…...

UEFITOOL 0.28:开源UEFI固件解析与修改的终极指南

UEFITOOL 0.28&#xff1a;开源UEFI固件解析与修改的终极指南 【免费下载链接】UEFITOOL28 项目地址: https://gitcode.com/gh_mirrors/ue/UEFITOOL28 你是否曾经好奇计算机启动时BIOS固件内部究竟发生了什么&#xff1f;或者需要修改固件却无从下手&#xff1f;UEFITO…...

Unity半透明模型单面显示问题的四大解决方案

1. 这个问题到底在烦谁&#xff1f;——从美术交接现场说起Unity里模型导入后“只有一面能看见&#xff0c;翻过去就变透明”&#xff0c;这事儿我见过太多次了。不是程序员写错了Shader&#xff0c;也不是美术导出时漏了法线&#xff0c;而是Unity默认的Front Face Culling&am…...

Office自定义界面编辑器:打造你的专属Office工作台

Office自定义界面编辑器&#xff1a;打造你的专属Office工作台 【免费下载链接】office-custom-ui-editor Standalone tool to edit custom UI part of Office open document file format 项目地址: https://gitcode.com/gh_mirrors/of/office-custom-ui-editor 你是否厌…...

暗黑2存档编辑器实战指南:免费Web工具深度解析与操作手册

暗黑2存档编辑器实战指南&#xff1a;免费Web工具深度解析与操作手册 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 想要在暗黑破坏神2中测试各种强力Build&#xff0c;却不想花费数百小时刷装备&#xff1f;渴望体验不同角色配…...

MapReduce与Spark核心原理对比:从批处理到内存计算的演进

1. 从“批处理之王”到“内存计算引擎”&#xff1a;大数据处理范式的演进如果你刚接触大数据领域&#xff0c;可能会被Hadoop、MapReduce、Spark这些名词搞得晕头转向。它们听起来都像是处理海量数据的“重型武器”&#xff0c;但各自的设计哲学和适用场景却大相径庭。简单来说…...

glTF-Transform:现代3D应用中的glTF模型优化与处理实战指南

glTF-Transform&#xff1a;现代3D应用中的glTF模型优化与处理实战指南 【免费下载链接】glTF-Transform glTF 2.0 SDK for JavaScript and TypeScript, on Web and Node.js. 项目地址: https://gitcode.com/gh_mirrors/gl/glTF-Transform 在当今的3D应用开发中&#xf…...

3分钟让Windows任务栏变透明:TranslucentTB完全指南

3分钟让Windows任务栏变透明&#xff1a;TranslucentTB完全指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否厌倦了Windows系统…...

3分钟掌握PlantUML Editor:用代码思维绘制专业UML图表的终极指南

3分钟掌握PlantUML Editor&#xff1a;用代码思维绘制专业UML图表的终极指南 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor 还在为复杂的UML图表绘制而烦恼吗&#xff1f;传统的拖拽式绘…...

GEO优化的两大误区:你是在“交学费”还是在“抢红利”?

当AI搜索成为用户的新入口&#xff0c;一批先行者已经吃到了红利。但更多人&#xff0c;还在两个极端之间摇摆。 你有没有遇到过这样的情况&#xff1f; 刷到某个同行&#xff0c;因为上了DeepSeek或豆包的推荐&#xff0c;咨询量翻了几倍。你也心动&#xff0c;开始研究GEO&a…...

AI API 中转站完全指南:从 Claude、GPT 到“满血”“翻车”,一次搞懂整个 AI API 圈子

如果你刚开始接触 AI API&#xff0c;大概率会在各种开发者群、论坛或者教程里看到一堆让人摸不着头脑的词&#xff0c;比如“满血”“阉割”“翻车”“官转”“上车”“池子”“逆向”等等。很多新人第一次看这些内容的时候&#xff0c;基本都是每个字都认识&#xff0c;但连在…...