JSON处理工具类
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);}}} }
相关文章:
JSON处理工具类
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.O…...
2022高教社杯全国大学生数学建模竞赛C题 问题一(2) Python代码演示
目录 1.2 结合玻璃的类型,分析文物样品表面有无风化化学成分含量的统计规律数据预处理绘图热力图相关系数图百分比条形图箱线图小提琴图直方图KED图描述性统计分析偏度系数峰度系数其它统计量1.2 结合玻璃的类型,分析文物样品表面有无风化化学成分含量的统计规律 数据预处理 …...
ARACom Proxy Class API 概念
1. Proxy Class 概述 生成方式:Proxy Class 是从 AutoSar 元模型的服务接口描述中生成的,ara::com 标准化了其接口,AP 产品供应商的工具链会生成实现该接口的代理实现类。 命名空间:ara::com 期望代理相关的工件在命名空间 “pro…...
【Scala入门学习】基本数据类型和变量声明
1. 基本数据类型 scala 的基本类型有 9种: Byte、Char、Short、Int、Long、Float、Double、Boolean、Unit Scala中没有基本数据类型的概念,所有的类型都是对象。 AnyVal:代表所有基本类型。 AnyRef:代表所以引用类型ÿ…...
C#基础(13)结构体
前言 随着函数的讲解完成,我想你已经初步有了写一些复杂逻辑功能的能力,但是我们会发现其实在我们大部分实际开发情况中,很多我们需要写的变量可能不只有一个属性。 他可能有很多变量,那这时候我们如果要把这些变量集中到一个东…...
Excel图片批量插入单元格排版处理插件【图片大师】
为了方便大家在图片的插入排版的重复工作中解放出来,最近发布了一款批量插入图片的插件,欢迎大家下载,免费试用。 这是图片的文件夹: 主要功能如下: 1,匹配单元格名称的多张图批量插入到一个单元格 该功能支持设置图…...
应用性能优化实践(二)提升应用启动和响应速度
一、提升应用启动和响应速度的方法 1、冷启动过程简介 应用启动时,后台无该应用的进程,需要创建新的进程,这种启动方式叫冷启动。 2、使用异步加载 使用异步加载可以在后台线程中处理耗时操作,从而提升应用响应速度。 3、延迟加载…...
接口测试系列文章专题
在你眼中什么是接口 HTTP协议 什么是接口测试 接口测试之工具 fiddler工具的原理 fiddler工具界面详解 fiddler工具的基本使用 fiddler使如何对手机app进行抓包的呢 fiddler手机app抓包教程 Charles自定义接口返回的数据内容 常用接口工具postman的基本使用方式 pos…...
Unity Hub自动安装指定版本Unity的Android开发环境
Unity开发Android环境要求SDK、DNK、JDK、Gradle版本都要对才能发布APK,自己去配置很容易出错。Unity Hub可以自动安装指定版本Unity的Android开发环境。 1.安装国内用的UnityHub(我这里用的3.3.2-c6) 2.找到对应的Unity版本 3.点击【从Unit…...
从0开始学ARM
1. ARM模式和寄存器 1.1 ARM处理器工作模式 Cortex系列之前的ARM处理器工作模式一共有7种。 1.1.1 工作模式 Cortex系列的ARM处理器工作模式有8种,多了1个monitor模式,如下图所示: ARM之所以设计出这么多种模式出来,就是为了…...
每日一题——第九十四题
// SortNumInFile.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。 // 题目:将一个文本文件number.txt中的数字按照从小到大排列后,重新写入到该文件中,要求排序前和排序后都输出该文件的内容。该文件中共有20个整数…...
Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
目录 一、Linux软件包管理器 - yum(ubuntu用apt代替yum)1、Linux下安装软件的方式2、认识 yum3、查找软件包4、安装软件5、如何实现本地机器和云服务器之间的文件互传 二、Linux编辑器 - vim1、vim 的基本概念2、vim 下各模式的切换3、vim 命令模式各命令…...
后续学习规划 ----含我个人的学习路线,经历及感受
目前的基础 开发相关(最重要) 1.Java SE 从入门到起飞 2.Java Web开发 3.苍穹外卖 以上三个是和开发相关的基础。 我是按照书写的顺序学习的,有需要的朋友可以参考。 计算机相关 其他的话,都是比较久远的了。隔得时间一年半…...
Skytower
一、安装配置靶机 下载地址: SkyTower: 1 ~ VulnHub 下载之后解压发现是VirtualBox格式的 我们下载一个VirtualBox,这是官网 Downloads – Oracle VirtualBox 安装到默认路径就 打开后点击注册 选择解压后的vbox文件 然后点击左上角管理 点击导出虚拟电脑&…...
成型的程序
加一个提示信息 加上python 常用的包 整个程序打包完 250M 安装 960MB matplot numpy pandas scapy pysearial 常用的包 (pyvisa)… … 啥都有 Python 解释器组件构建 要比 lua 容易的多 (C/Rust 的组件库)...
卡尔曼滤波中Q和R与噪声的关系
卡尔曼滤波 一种用于估计系统状态的递归滤波器,通过融合传感器测量和系统模型,提供系统状态的最优估计。 Q和R是什么 在卡尔曼滤波中,Q和R分别表示过程噪声和测量噪声的协方差矩阵。 Q Q Q矩阵(过程噪声协方差矩阵)…...
sicp每日一题[2.10]
Exercise 2.10 Ben Bitdiddle, an expert systems programmer, looks over Alyssa’s shoulder and comments that it is not clear what it means to divide by an interval that spans zero. Modify Alyssa’s code to check for this condition and to signal an error if i…...
MCN跨国企业如何从0到1搭建ITSM运维体系
1. IT运维体系概述 1.1 定义与目标 IT运维体系,即信息技术运维管理体系,是指企业为了保障IT基础设施和业务系统的稳定、高效、安全运行,所建立的一系列管理流程、规范、工具和组织的总称。其核心目标是通过对IT资源的集中管理和服务&#x…...
【C++入门学习】7. 类型
基本类型 修饰符类型 基本类型 类型关键字布尔型bool字符型char整型int浮点型float双浮点型double无类型void宽字符型wchar_t 字符型char只占八位,存储ascii码的,而宽字符型是为了存储多国语言的代码unicode。 // 宽字符型的定义 typedef short int …...
视频服务器:GB28181网络视频协议
一、前言 某项目中需要集成视频管理平台,实现分布在各省公司的摄像及接入,对视频进行统一管理。本项目中视频管理平台采用GB/T28181实现的监控设备接入管理平台,支持在开放互联网和局域网对监控设备进行远程接入、远程管理、远程调阅、录像回…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
