JSON处理工具类

news2024/9/19 9:20:53

JSON处理工具类

  • import org.json.JSONArray;
    import org.json.JSONObject;
     
    import java.util.ArrayList;
    import java.util.List;
     
    /**
     * JSON处理工具类
     */
    public class JsonUtils {
     
        /**
         **将json字符串转为map
         * @param json
         * @return java.util.Map<java.lang.String, java.lang.Object>
         **/
        public static Map<String, Object> jsonToMap(String json) {
            if (StringUtils.isBlank(json)){
                return null;
            }
     
            ObjectMapper objectMapper = new ObjectMapper();
     
            Map<String, Object> map = null;
            try {
                map = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
     
            return map;
        }
     
        /**
         **json格式字符串转换为List<Map<String, Object>>
         * @param json
         * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
         * @author yinqi
         * @create 2024/2/1 9:36
         **/
        public static List<Map<String, Object>> jsonToList(String json) {
            if (StringUtils.isBlank(json)){
                return null;
            }
     
            ObjectMapper objectMapper = new ObjectMapper();
            List<Map<String, Object>> list = null;
            try {
                list = objectMapper.readValue(json, new TypeReference<List<Map<String, Object>>>() {
                });
            } catch (JsonProcessingException e) {
                System.err.println(e.getMessage());
            }
            return list;
        }
     
        /**
         * 将JSON字符串转换为JSONObject对象
         *
         * @param json JSON字符串
         * @return 转换后的JSONObject对象
         */
        public static JSONObject stringToJson(String json) {
            return new JSONObject(json);
        }
     
        /**
         * 将JSONObject对象转换为JSON字符串
         *
         * @param jsonObject JSONObject对象
         * @return 转换后的JSON字符串
         */
        public static String jsonToString(JSONObject jsonObject) {
            return jsonObject.toString();
        }
     
        /**
         * 获取JSONObject中指定字段的字符串值
         *
         * @param jsonObject JSONObject对象
         * @param key        字段名
         * @return 字段对应的字符串值,若字段不存在则返回空字符串
         */
        public static String getString(JSONObject jsonObject, String key) {
            return jsonObject.optString(key, "");
        }
     
        /**
         * 获取JSONObject中指定字段的整数值
         *
         * @param jsonObject JSONObject对象
         * @param key        字段名
         * @return 字段对应的整数值,若字段不存在或无法转换为整数时返回0
         */
        public static int getInt(JSONObject jsonObject, String key) {
            return jsonObject.optInt(key, 0);
        }
     
        /**
         * 获取JSONObject中指定字段的布尔值
         *
         * @param jsonObject JSONObject对象
         * @param key        字段名
         * @return 字段对应的布尔值,若字段不存在或无法转换为布尔值时返回false
         */
        public static boolean getBoolean(JSONObject jsonObject, String key) {
            return jsonObject.optBoolean(key, false);
        }
     
        /**
         * 获取JSONObject中指定字段的JSONObject对象
         *
         * @param jsonObject JSONObject对象
         * @param key        字段名
         * @return 字段对应的JSONObject对象,若字段不存在或无法转换为JSONObject对象时返回null
         */
        public static JSONObject getJSONObject(JSONObject jsonObject, String key) {
            return jsonObject.optJSONObject(key);
        }
     
        /**
         * 获取JSONObject中指定字段的JSONArray对象
         *
         * @param jsonObject JSONObject对象
         * @param key        字段名
         * @return 字段对应的JSONArray对象,若字段不存在或无法转换为JSONArray对象时返回null
         */
        public static JSONArray getJSONArray(JSONObject jsonObject, String key) {
            return jsonObject.optJSONArray(key);
        }
     
        /**
         * 将对象转换为JSONObject对象
         *
         * @param obj 对象
         * @return 转换后的JSONObject对象
         */
        public static JSONObject objectToJson(Object obj) {
            return new JSONObject(obj);
        }
     
        /**
         * 将JSON字符串转换为JSONArray对象
         *
         * @param json JSON字符串
         * @return 转换后的JSONArray对象,若转换失败则返回null
         */
        public static JSONArray stringToJsonArray(String json) {
            try {
                return new JSONArray(json);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
     
        /**
         * 将JSONArray对象转换为JSON字符串
         *
         * @param jsonArray JSONArray对象
         * @return 转换后的JSON字符串
         */
        public static String jsonArrayToString(JSONArray jsonArray) {
            return jsonArray.toString();
        }
     
        /**
         * 将JSONArray对象转换为指定类型的List集合
         *
         * @param jsonArray JSONArray对象
         * @param clazz     List集合的元素类型
         * @return 转换后的List集合
         */
        public static <T> List<T> jsonArrayToList(JSONArray jsonArray, Class<T> clazz) {
            List<T> list = new ArrayList<>();
            for (int i = 0; i < jsonArray.length(); i++) {
                T item = null;
                try {
                    item = clazz.newInstance();
                    if (item instanceof JSONObject) {
                        list.add((T) jsonArray.getJSONObject(i));
                    } else {
                        list.add((T) jsonArray.get(i));
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return list;
        }
     
        /**
         * 将List集合转换为JSONArray对象
         *
         * @param list List集合
         * @return 转换后的JSONArray对象
         */
        public static JSONArray listToJsonArray(List<?> list) {
            JSONArray jsonArray = new JSONArray();
            for (Object obj : list) {
                jsonArray.put(objectToJson(obj));
            }
            return jsonArray;
        }
     
            /**
         **将json字符串转换为对象集合
         * @param jsonString
         * @param valueType
         * @return java.util.List<T>
         **/
        public static <T> List<T> jsonToList(String jsonString, Class<T> valueType) throws IOException {
            if (StringUtils.isBlank(jsonString)){
                return null;
            }
            ObjectMapper objectMapper = new ObjectMapper();
            return objectMapper.readValue(jsonString, objectMapper.getTypeFactory().constructCollectionType(List.class, valueType));
        }
     
        /**
         **将json字符串中的旧字符串替换成新字符串
         * @param jsonString json字符串
         * @param oldString 旧字符串
         * @param newString 新字符串
         * @return java.lang.String
         **/
        public static String replaceStringInJson(String jsonString, String oldString, String newString) {
            try {
                // 将json字符串转换为JSONObject对象
                JSONObject json = new JSONObject(jsonString);
     
                // 使用递归函数进行替换
                replaceStringInJson(json, oldString, newString);
     
                // 返回更新后的json字符串
                return json.toString();
            } catch (JSONException e) {
                e.printStackTrace();
            }
     
            // 如果发生异常,则返回原始的json字符串
            return jsonString;
        }
     
        /**
         **将json对象中的旧字符串替换成新字符串
         * @param object JSONObject或JSONArray
         * @param oldString 旧字符串
         * @param newString 新字符串
         * @return void
         **/
        public static void replaceStringInJson(Object object, String oldString, String newString) {
            if (object instanceof JSONObject) {
                JSONObject json = (JSONObject) object;
                // 遍历JSONObject的所有键
                for (String key : json.keySet()) {
                    Object value = json.get(key);
                    // 如果键对应的值是字符串类型,则尝试替换旧字符串为新字符串
                    if (value instanceof String) {
                        String oldValue = (String) value;
                        String newValue = oldValue.replaceAll(oldString, newString);
                        // 更新键对应的值为新字符串
                        json.putOpt(key, newValue);
                    }else {
                        replaceStringInJson(value, oldString, newString);
                    }
                }
            } else if (object instanceof JSONArray) {
                JSONArray jsonArray = (JSONArray) object;
                for (int i = 0; i < jsonArray.size(); i++) {
                    Object value = jsonArray.get(i);
                    replaceStringInJson(value, oldString, newString);
                }
            }
        }
    }
    

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

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

相关文章

07_Python数据类型_集合

Python的基础数据类型 数值类型&#xff1a;整数、浮点数、复数、布尔字符串容器类型&#xff1a;列表、元祖、字典、集合 集合 集合&#xff08;set&#xff09;是Python中一个非常强大的数据类型&#xff0c;它存储的是一组无序且不重复的元素&#xff0c;集合中的元素必须…

SpringBoot 消息队列RabbitMQ死信交换机

介绍 生产者发送消息时指定一个时间&#xff0c;消费者不会立刻收到消息&#xff0c;而是在指定时间之后才收到消息。 死信交换机 当一个队列中的消息满足下列情况之一时&#xff0c;就会成为死信(dead letter) 消费者使用basic.reject或 basic.nack声明消费失败&#xff0…

LidarView之定制版本

介绍 LidarView软件定制开发需要关注几点&#xff1a;1.应用程序名称&#xff1b;2.程序logo&#xff1b;3.Application版本号&#xff1b;4.安装包版本号 应用程序名称 在项目的顶层cmake里边可以指定程序名称 project(LidarView)需要指定跟Superbuild一样的编译类型 set…

英语学习之fruit

目录 不熟悉熟悉 不熟悉 breadfruit 面包果 date 椰枣 raspberry 覆盆子 blackberry 黑莓 blackcurrant 黑加仑&#xff0c;黑醋栗 plum 李子 熟悉 apple 苹果&#x1f34e; coconut 椰子&#x1f965; banana 香蕉&#x1f34c; tomato 西红柿 pear 梨子 watermelon 西瓜…

30款免费好用的工具,打工人必备!

免费工具软件&#xff0c;办公人必备&#xff0c;提升工作效率 启动盘制作&#xff1a;Ventoype工具&#xff1a;微PEwindows/office jh工具&#xff1a;HEU KMS Activator桌面资料转移工具&#xff1a;个人资料专业工具右键菜单管理&#xff1a;ContextMenuManager驱动安装&a…

【面试八股总结】GMP模型

GMP概念 G&#xff08;Goroutine&#xff09;&#xff1a;代表Go协程&#xff0c;是参与调度与执行的最小单位。 存储Goroutine执行栈信息、状态、以及任务函数等。G的数量无限制&#xff0c;理论上只受内存的影响。Goroutines 是并发执行的基本单位&#xff0c;相比于传统的线…

虽难必学系列:Netty

Netty 是一个基于 Java 的高性能、异步事件驱动的网络应用框架&#xff0c;广泛用于构建各类网络应用&#xff0c;尤其是在高并发、低延迟场景下表现出色。作为一个开源项目&#xff0c;Netty 提供了丰富的功能&#xff0c;使得开发者可以轻松构建协议服务器和客户端应用程序。…

Nginx从入门到入土(一):DNS域名解析

前言 hostName&#xff0c;在Linux系统上是一个命令&#xff0c;用来显示和设置系统的主机名称。其实它就是域名。 常见的域名有我们熟悉的taobao.com;baidu.com等等。 我们在地址栏输入baidu.com 进入的就是此页面。我们看到地址栏里显示的是www.baidu.com 。 注意&#xf…

MySQL篇(运算符)(持续更新迭代)

目录 一、简介 二、运算符使用 1. 算术运算符 1.1. 加法运算符 1.2. 减法运算符 1.3. 乘法与除法运算符 1.4. 求模&#xff08;求余&#xff09;运算符 2. 比较运算符 2.1. 等号运算符 2.2. 安全等于运算符 2.3. 不等于运算符 2.4. 空运算符 2.5. 非空运算符 2.6.…

Java数据存储结构——平衡二叉树

文章目录 22.1.3 平衡二叉树22.1.3.1 LL22.1.3.2 LR22.1.3.3 RR22.1.3.4 RL 22.1.3 平衡二叉树 平衡二叉树的特点&#xff1a; 二叉树左右两个子树的高度差不超过1任意节点的左右两个子树都是一颗平衡二叉树 在原来的平衡二叉树中&#xff0c;新增数据会破坏平衡性&#xff…

Linux per memcg lru lock

内核关于per memcg lru lock的重要提交&#xff1a; f9b1038ebccad354256cf84749cbc321b5347497 6168d0da2b479ce25a4647de194045de1bdd1f1d 背景 自电子计算机诞生以来&#xff0c;内存性能一直是行业关心的重点。内存也随着摩尔定律&#xff0c;在大小和速度上一直增长。云…

Linux系统上搭建Vulhub靶场

Linux系统上搭建Vulhub靶场 ​vulhub​ 是一个开源的漏洞靶场&#xff0c;它提供了各种易受攻击的服务和应用程序&#xff0c;供安全研究人员和学习者测试和练习。要在 Linux 系统上安装和运行 vulhub​&#xff0c;可以按照以下步骤进行&#xff1a; 1. 安装 Docker 和 Docke…

数据结构(八)——Java实现七大排序

一、插入排序 1.直接插入排序 public static void insertSort(int []arr){for (int i 0; i < arr.length; i) {int j i-1;int tmp arr[i];for (; j >0 ; j--) {if(arr[j] > tmp){arr[j1] arr[j];}else{break;}}arr[j1] tmp;}}直接插入排序特性总结 1. 元素集合越…

【算法】滑动窗口—最小覆盖子串

题目 ”最小覆盖子串“问题&#xff0c;难度为Hard&#xff0c;题目如下&#xff1a; 给你两个字符串 S 和 T&#xff0c;请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串&#xff0c;则算法返回空串&#xff0c;如果存在这样一个子串&#xff0c;则可…

【三大运营商】大数据平台体系架构【顶层规划设计】

在国内运营商&#xff08;如中国移动、中国联通、中国电信&#xff09;的大数据平台建设中&#xff0c;顶层规划设计至关重要。以下是针对三大运营商为例【如电信】的大数据平台体系架构的顶层规划设计方案&#xff0c;涵盖整体架构、关键组件、数据管理、应用场景等方面。 1. …

C#数据结构与算法实战入门指南

前言 在编程领域&#xff0c;数据结构与算法是构建高效、可靠和可扩展软件系统的基石。它们对于提升程序性能、优化资源利用以及解决复杂问题具有至关重要的作用。今天大姚分享一些非常不错的C#数据结构与算法实战教程&#xff0c;希望可以帮助到有需要的小伙伴。 C#经典十大排…

音视频入门基础:AAC专题(6)——FFmpeg源码中解码ADTS格式的AAC的Header的实现

一、引言 通过FFmpeg命令&#xff1a; ./ffmpeg -i XXX.aac 可以获取到ADTS格式的AAC裸流的音频采样频率、声道数、采样位数、码率等信息&#xff1a; 在vlc中也可以获取到这些信息&#xff08;vlc底层也使用了FFmpeg进行解码&#xff09;&#xff1a; 所以FFmpeg和vlc是怎样…

【混淆矩阵】Confusion Matrix!定量评价的基础!如何计算全面、准确的定量指标去衡量模型分类的好坏??

【混淆矩阵】Confusion Matrix&#xff01;定量评价的基础&#xff01; 如何计算全面、准确的定量指标去衡量模型分类的好坏&#xff1f;&#xff1f; 文章目录 【混淆矩阵】Confusion Matrix&#xff01;定量评价的基础&#xff01;1. 混淆矩阵2.评价指标3.混淆矩阵及评价指标…

Redis基础数据结构之 ziplist 压缩列表 源码解读

目录标题 ziplist 是什么?ziplist 特点ziplist 数据结构ziplist 节点pre_entry_lengthencoding 和 lengthcontent ziplist 基本操作插入&#xff08;Insertion&#xff09;删除&#xff08;Deletion&#xff09;查找&#xff08;Search&#xff09;更新&#xff08;Update&…

Qt多元素控件——QTableWidget

文章目录 QTabWidget核心属性、方法和信号使用示例 QTabWidget核心属性、方法和信号 QTableWidget表示一个表格控件&#xff0c;一个表格中包含若干行&#xff0c;每一行包含若干列。 表格中的每一个单元格&#xff0c;是一个QTableWidgetItem对象。 QTableWidget核心方法&a…