JSONObject 比 Map好使的地方

这篇具有很好参考价值的文章主要介绍了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 value
        JSONObject originalJson = new JSONObject();
        originalJson.put("accountStatuses1","accountStatuses_test");
        originalJson.put("marketplaceId1","marketplaceId_test");
        originalJson.put("performanceMetrics1","performanceMetrics_test");
        // 要进行替换的键值映射 key2 value2
        JSONObject configMapping = new JSONObject();
        configMapping.put("accountStatuses1", "accountStatuses");
        configMapping.put("marketplaceId1", "marketplaceId");
        configMapping.put("performanceMetrics1", "performanceMetrics");
        // 调用递归函数进行键替换
        replaceKeys(originalJson, configMapping);
        // 输出替换后的 JSON
        System.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 格式的字符串,解析为 Map
                Map<String, Object> innerJsonData = parseJsonString(value);
                replaceKeys(innerJsonData, keyMapping);
                jsonObject.put(key, toJsonString(innerJsonData));
            }
        }
    }

    // 解析 JSON 字符串为 Map
    private static Map<String, Object> parseJsonString(String jsonString) {
        // 此处需要使用 JSON 解析库来实现解析过程
        // 这里仅为示例,需要替换为实际的 JSON 解析方法
        // 你可以使用其他 JSON 解析库来解析 JSON 字符串为 Map
        return null;
    }

    // 将 Map 转换为 JSON 字符串
    private static String toJsonString(Map<String, Object> jsonData) {
        // 此处需要使用 JSON 序列化库来实现转换过程
        // 这里仅为示例,需要替换为实际的 JSON 序列化方法
        // 你可以使用其他 JSON 序列化库来将 Map 转换为 JSON 字符串
        return null;
    }
}

这样用Map是非常不方便的文章来源地址https://www.toymoban.com/news/detail-709504.html

到了这里,关于JSONObject 比 Map好使的地方的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java判断当前日期时间大于指定日期时间 记录日常开发中的小搜索

    可以使用Java中的 Calendar 类来获取当前时间和所需的指定时间并将它们进行比较。这是一个示例代码: 在上面的示例中,我们首先使用 Calendar.getInstance() 方法获取当前时间和指定时间的 Calendar 对象。然后,我们将指定时间设置为2022年1月1日下午3:30,并使用 after() 方法比较当

    2024年02月07日
    浏览(56)
  • 【Java】JSONarray转JSONobject

    公司开发有用到,但是经常会忘记,做笔记记录一下!         1、将数据包转成JSONarray         2、使用for循环遍历JSONarray【这里使用size()方法】         3、每次循环取到的JSONObject对象         4、再根据对象中的字段类型使用getXxx()取到值  

    2024年02月13日
    浏览(35)
  • Java开发面试题目场景业务提问第十六章:常问日常必备_JAVA_面试题集(含答案)【王大师】

    往期文章   第 十 章 日常_JAVA_面试题集10(含答案)  第十三章:日常_JAVA_面试题集13(含答案)  第十二章:日常_JAVA_面试题集12(含答案)  第十一章:日常_JAVA_面试题集11(含答案)  往期文章大全……

    2024年02月08日
    浏览(54)
  • Java 阿里的 JSONObject 如何使用

    阿里巴巴的 JSONObject 是一个 Java 类库,用于处理 JSON 数据。它是 Java JSON 工具包 fastjson 的一部分,是一种比较流行的 JSON 序列化和反序列化库,支持 JSON 字符串和 Java 对象之间的相互转换。 在 Java 中使用阿里 JSONObject,需要完成以下步骤: 引入 fastjson 依赖:在项目的 pom.xm

    2024年02月15日
    浏览(42)
  • [java]JsonObject与JsonArray转换

    备忘一下,首先 这是一个JsonArrayStr,他可以转换为 JsonArray 。 这是一个JsonObjectStr,他可以转换为 JsonObject 。 JsonObject转换为java对象、JsonArray转换为Java对象 JsonObject的value为JsonArray,对应的java类型为List。在案例中,java代码如下(这里用的内部类) 使用fastjson转换jsonStr为java对

    2023年04月21日
    浏览(36)
  • JAVA - fastjson 中 JSONObject 的顺序问题

    目录 1. JSONObject  存在的默认排序问题一 1.1. 解决方案一 1.2. 解决方案二 2. JSONObject  存在的默认排序问题二 2.1. 解决方案一 2.2. 解决方案二 在使用 fastjson 中的 JSONObject 有时候会遇到数据顺序发生了变化,而实际需求中需要保持原有的顺序。 JSONObject 初始化时候顺序直接变

    2024年02月01日
    浏览(31)
  • Java:JSONObject.toJSONString输出字符串内容处理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 JSONObject可以将Java对象转换成JSON流输出,进行数据显示或者数据交互的时候很好用。 但是JSONObject.toJSONString输出的字符串往往有以下几个格式问题: 1.Java中的 String 类型输出的时候含有双引号(“”)

    2024年02月03日
    浏览(37)
  • Java8 List<Object> 转成 List<JSONObject>

       Java8 List<Object> 转成 List<Map<String, Object>>

    2024年02月16日
    浏览(40)
  • Java8 Stream流List<JSONObject>通过某一属性进行排序

    List对象 1.首先你需要list.parallelStream().sorted 进行流处理,使用parallelStream可以充分调度多核CPU。 2.使用Comparator.comparing进行排序,reversed()进行倒序排列,thenComparing进行下一个排序。 3.Comparator.comparing()里面的内容,也是就是Object::getter,例如Test::getName 4.最后格式化为需要的格式

    2024年02月12日
    浏览(62)
  • 嵌入式开发中一些需要留意的地方

            使用STM32开发的朋友不知道是否有发现过这样的一些宏定义?如下:         看到上面的语句一开始确实搞不懂为什么要写这些东西,通过上网去查询,才搞明白这其中的使用原理。         上面的代码段我们可以看到两部分的内容:         1)__CC_ARM  

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包