当前位置: 首页 > 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是非常不方便的

http://www.lryc.cn/news/158856.html

相关文章:

  • [js] 图解 event.pageX event.clientX event.offsetX getBoundingClientRect
  • VsCode备忘
  • Linux命令200例:Yum强大的包管理工具使用(常用)
  • 使用 Linux 相关知识部署博客系统
  • Linux--进程--vfork与fork区别
  • Ubuntu系统重装nvidia gpu驱动
  • Java + Selenium + Appium自动化测试
  • 【sgLazyCascader】自定义组件:基于el-cascader的懒加载级联菜单,支持异步加载子级菜单
  • 2023高教社杯数学建模E题思路模型 - 黄河水沙监测数据分析
  • 一、Linux下常用的压缩格式
  • MySQL 查询 - 排除某些字段的SQL查询,提升查询性能
  • 国产信创服务器如何进行安全可靠的文件传输?
  • ARTS第五周:S - 数据编织 Data fabric
  • 基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程
  • Spring Boot 介绍
  • mysql基于AES_ENCRYPTAES_DECRYPT实现密码的加密与解密
  • 怎么把pdf转换成jpg图片?
  • 计算机脚本的概念,如何编写、使用脚本 (Script)?
  • c语言 5.0
  • 如何配置远程访问以在外部网络中使用公司内部的OA办公系统——“cpolar内网穿透”
  • 【AI】机器学习——线性模型(线性回归)
  • 智能小车之跟随小车、避障小车原理和代码
  • 行业追踪,2023-09-07
  • Qt creator中项目的构建配置和运行设置
  • 蓝桥杯打卡Day3
  • Linux系统编程--IO
  • 亚马逊云科技通过生成式AI,帮助清华RIOS加速计算和分析的处理效率
  • 全志T113-S3入门资料汇总(避坑指南)一
  • 3dMax全球学习资源、资源文件和教程 !
  • API接口是什么?有哪些免费的API接口?