json字符串的处理
json字符串的处理
- 【1】解析json字符串
- (1)如果json格式字符串 ,最外层 是 中括号,表示数组,就使用方法
- (2)如果json格式字符串,最外层是 大括号,表示对象,就是用方法
- (3)数组 和 对象可以相互嵌套
- (4)java遍历修改json数组里的某个字段值
- (5)java遍历修改更复杂的嵌套json数组里的某个字段值
- 【2】JSONUtil工作介绍
- (1)JSON字符串创建
- (2)JSON字符串解析
- (3)XML字符串转换为JSON
- (4)JSON转换为XML
- (5)JSON转Bean
- (6)常见JSON操作方法
【1】解析json字符串
java处理json格式字符串,首先转成 JSONArray 或 JSONObject 类型(如果有实际对象类的话,也可以直接转成对象)
(1)如果json格式字符串 ,最外层 是 中括号,表示数组,就使用方法
JSONArray array = JSONArray.parseArray(text);
(2)如果json格式字符串,最外层是 大括号,表示对象,就是用方法
JSONObject result = JSONArray.parseObject(text);
(3)数组 和 对象可以相互嵌套
就相当于 JSONArray 和 JSONObject 可以相互嵌套, JSON对象的用法和java中 List Map 用法是一样的!
1-可以通过JSONArray循环获取每一项的值 有get 和 add 方法 取值 赋值
2-JSONObject 可以 通过 get 和 put 方法取值赋值
处理完数据后,还可以通过 toJSONString方法转为字符串
(4)java遍历修改json数组里的某个字段值
JSONArray feedetailList = data.getJSONArray("feedetailList");
for (int i = 0; i < feedetailList.size(); i++) {feedetailList.getJSONObject(i).put("psnNo",data.getString("psnNo"));
}
(5)java遍历修改更复杂的嵌套json数组里的某个字段值
(1)因为没有具体的对象,所以将json直接转成json数组JSONObject
(2)在取嵌套的内容时,如果是数组就用getJSONArray,如果是对象就用getJSONObject
(3)要往数组里存入值就用add,取值就用get;要往对象里存入值就用set,取值就用get
// 实时更新数据
DataModelRelation dataModelRelation = indDataModel.getDataModelRelation();
String layout = dataModelRelation.getLayout();
// 解析 JSON 字符串为 JSONObject
JSONObject jsonObject = new JSONObject(layout);// 获取最底层的 JSONArray
JSONArray layoutInfo = jsonObject.getJSONArray("cells");
for (int i = 0; i < layoutInfo.size(); i++) {JSONObject cell = layoutInfo.getJSONObject(i);JSONObject data = cell.getJSONObject("data");if (ObjectUtil.isNotNull(data)) {String id = data.get("id").toString();if (ObjectUtil.isNotNull(id)) {IndTable indTable = iIndTableRepo.queryById(Long.valueOf(id));if (ObjectUtil.isNotNull(indTable)) {layoutInfo.getJSONObject(i).getJSONObject("data").set("tableNameZh",indTable.getTableNameZh());}}}
}
jsonObject.set("cells",layoutInfo);
dataModelRelation.setLayout(JSONUtil.toJsonStr(jsonObject));
indDataModel.setDataModelRelation(dataModelRelation);
【2】JSONUtil工作介绍
(1)JSON字符串创建
JSONUtil.toJsonStr可以将任意对象(Bean、Map、集合等)直接转换为JSON字符串。 如果对象是有序的Map等对象,则转换后的JSON字符串也是有序的。
/*** 转换为JSON字符串* <p>* 被转为JSON的对象** @return JSON字符串*/@Testvoid toJsonStrTest() {//mapSortedMap<Object, Object> sortedMap = new TreeMap<Object, Object>() {private static final long serialVersionUID = 1L;{put("attributes", "a");put("b", "b");put("c", "c");}};//对象Student beanString = new Student(1, 1, 1, "张三");//集合List<Student> list = new ArrayList<>();list.add(new Student(1, 1, 1, "张三"));list.add(new Student(1, 1, 2, "李四"));list.add(new Student(1, 1, 3, "王五"));System.out.println("JSONUtil.toJsonStr(beanString) = " + JSONUtil.toJsonStr(beanString));System.out.println("JSONUtil.toJsonStr(sortedMap) = " + JSONUtil.toJsonStr(sortedMap));System.out.println("JSONUtil.toJsonStr(list) = " + JSONUtil.toJsonStr(list));}
结果
JSONUtil.toJsonStr(beanString) = {"gradeId":0,"studentId":1,"termId":1,"classId":1,"name":"张三"}
JSONUtil.toJsonStr(sortedMap) = {"attributes":"a","b":"b","c":"c"}
JSONUtil.toJsonStr(list) = [{"gradeId":0,"studentId":1,"termId":1,"classId":1,"name":"张三"},
{"gradeId":0,"studentId":2,"termId":1,"classId":1,"name":"李四"},
{"gradeId":0,"studentId":3,"termId":1,"classId":1,"name":"王五"}]
如果我们想获得格式化后的JSON,则:
JSONUtil.toJsonPrettyStr(object);System.out.println("JSONUtil.toJsonPrettyStr(sortedMap) = "+ JSONUtil.toJsonPrettyStr(sortedMap));
结果
JSONUtil.toJsonPrettyStr(sortedMap) = {"attributes": "a","b": "b","c": "c"
}
(2)JSON字符串解析
/*** JSON字符串转JSONObject对象* <p>* JSON字符串** @return JSONObject*/
@Test
void Test() {String html = "{\"name\":\"Something must have been changed since you leave\"}";JSONObject jsonObject = JSONUtil.parseObj(html);System.out.println("jsonObject.getStr(\"name\") = " + jsonObject.getStr("name"));
}
结果
jsonObject.getStr("name") = Something must have been changed since you leave
(3)XML字符串转换为JSON
/*** XML字符串转为JSONObject** XML字符串* @return JSONObject*/@Testvoid parseFromXmlTest() {String s = "<sfzh>123</sfzh><sfz>456</sfz><name>aa</name><gender>1</gender>";JSONObject json = JSONUtil.parseFromXml(s);System.out.println("json.get(\"sfzh\") = " + json.get("sfzh"));System.out.println("json.get(\"name\") = " + json.get("name"));}
结果
json.get("sfzh") = 123
json.get("name") = aa
(4)JSON转换为XML
/*** 转换为XML字符串** @param json JSON* @return XML字符串*/@Testvoid toXmlStrTest() {final JSONObject put = JSONUtil.createObj().set("aaa", "你好").set("键2", "test");// <aaa>你好</aaa><键2>test</键2>final String s = JSONUtil.toXmlStr(put);System.out.println("s = " + s);}
结果
s = <aaa>你好</aaa><键2>test</键2>
(5)JSON转Bean
我们先定义两个较为复杂的Bean(包含泛型)
@Datapublic class ADT {private List<String> BookingCode;}@Datapublic class Price {private List<List<ADT>> ADT;}/*** JSON字符串转为实体类对象,转换异常将被抛出** @param <T> Bean类型* @param jsonString JSON字符串* @param beanClass 实体类对象* @return 实体类对象* @since 3.1.2*/@Testvoid toBeanTest() {String json = "{\"ADT\":[[{\"BookingCode\":[\"N\",\"N\"]}]]}";Price price = JSONUtil.toBean(json, Price.class);System.out.println("price = " + price);}
(6)常见JSON操作方法
put(key, value): 向JSON对象中添加键值对。
get(key): 获取JSON对象中指定键的值。
getString(key): 获取JSON对象中指定键的字符串值。
getInt(key): 获取JSON对象中指定键的整数值。
getJSONObject(key): 获取JSON对象中指定键的嵌套JSON对象。
getJSONArray(key): 获取JSON对象中指定键的JSON数组。
toString(): 将JSON对象转换为字符串。
parse(jsonString): 解析JSON字符串为JSON对象。
toBean(jsonString,class):将JSON转换为Java对象
toJsonStr(object):将Java对象转换为JSON字符串
使用实例
javaCopy codeimport com.example.JSONUtil; // 假设这是的JSONUtil类public class JSONUtilExample {public static void main(String[] args) {// 创建JSON对象JSONUtil jsonUtil = new JSONUtil();jsonUtil.put("name", "John");jsonUtil.put("age", 30);// 将JSON转为字符串String jsonString = jsonUtil.toString();System.out.println("JSON String: " + jsonString);// 解析JSON字符串JSONUtil parsedJSON = JSONUtil.parse(jsonString);String name = parsedJSON.getString("name");int age = parsedJSON.getInt("age");System.out.println("Name: " + name);System.out.println("Age: " + age);//使用JSONUtil.toBean将JSON转换为Java对象//假设从某个来源获取了一个JSON字符串String jsonString = "{\"name\":\"John\",\"age\":30}";Person person = JSONUtil.toBean(jsonString, Person.class);// 使用JSONUtil.toJsonStr将Java对象转换为JSON字符串Person person = new Person("John", 30, new String[]{"Reading", "Gaming"});String jsonStr = JSONUtil.toJsonStr(person);}}相关文章:
json字符串的处理
json字符串的处理 【1】解析json字符串(1)如果json格式字符串 ,最外层 是 中括号,表示数组,就使用方法(2)如果json格式字符串,最外层是 大括号,表示对象,就是…...
Java基础String常见的编程练习
1.对字符串数组进行排序 package javalianxi;import java.util.Arrays; import java.util.Comparator;public class Test1 {public static void main(String[] args) {String[] array { "cd", "CD", "bc", "AB", "ab", &q…...
代码随想录算法训练营(回溯5)| 491.递增子序列 46.全排列 47.全排列 II
491.递增子序列 本题和大家刚做过的 90.子集II 非常像,但又很不一样,很容易掉坑里。 题目链接/文章讲解 视频讲解 46.全排列 本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。 为什么排列问题不用…...
专业140+总分420+南京信息工程大学811信号与系统考研经验南信大电子信息与通信工程,真题,大纲,参考书
今年顺利被南信大电子信息录取,初试420,专业811信号与系统140(Jenny老师辅导班上140很多,真是大佬云集),今年应该是南信大电子信息最卷的一年,复试线比往年提高了很多,录取平均分380…...
一元函数微分学【高数笔记】
1. 什么是微分?什么是微商? 2. 什么是函数的微分? 3. 在函数的微分中,有什么样的关系? 4. 一元函数的微分运用在什么题型中? 5. 什么是一元函数?...
(16)Hive——企业调优经验
前言 本篇文章主要整理hive-3.1.2版本的企业调优经验,有误请指出~ 一、性能评估和优化 1.1 Explain查询计划 使用explain命令可以分析查询计划,查看计划中的资源消耗情况,定位潜在的性能问题,并进行相应的优化。 explain执行计划…...
【详解】图的概念和存储结构(邻接矩阵,邻接表)
目录 图的基本概念: 图的存储结构 邻接矩阵(GraphByMatrix): 基本参数: 初始化: 获取顶点元素在其数组中的下标 : 添加边和权重: 获取顶点的度: 打印图…...
【AIGC】Stable Diffusion介绍
Stable Diffusion 是一个基于 OpenAI 的 Diffusion 模型的扩展版本,它采用了稳定扩散(Stable Diffusion)的技术,旨在提高图像生成和处理的质量。下面是 Stable Diffusion 的详细介绍: 基于 Diffusion 的图像生成&…...
2024.2.18 C++QT 作业
思维导图 练习题 1>定义一个基类 Animal,其中有一个虛函数perform(),用于在子类中实现不同的表演行为。 #include <iostream>using namespace std;class Animal { public:virtual void perform() {cout << "这是一个动…...
【qt创建线程两种方式】
QT使用线程的两种方式 1.案例进度条 案例解析: 如图由组件一个进度条和三个按钮组成,当点击开始的时候进度条由0%到100%,点击暂停,进度条保持之前进度,再次点击暂停变为继续,点击停止按钮进度条停止。 案…...
网络安全-一句话木马
声明 遵纪守法 请严格遵守网络安全法相关条例! 此分享主要用于交流学习,请勿用于非法用途,一切后果自付。 一切未经授权的网络攻击均为违法行为,互联网非法外之地。 反制 大家在知道了常规一句话的木马之后,就可以通…...
在k8s中,使用DirectPV CSI作为分布式存储的优缺点
DirectPV 提供了一种直接将物理卷(Physical Volumes)与 Kubernetes 集群中的 Pod 绑定的机制。 利用 DirectPV,你可以将相应的 PV 直接与节点上的物理存储设备(如磁盘)进行绑定,而无需通过网络存储服务(如 NFS 或 Ceph)来提供存储。这种直接访问物理卷的方式,有助于提…...
自动化AD域枚举和漏洞检测脚本
linWinPwn 是一个 bash 脚本,可自动执行许多 Active Directory 枚举和漏洞检查。该脚本基于很多现有工具实现其功能,其中包括:impacket、bloodhound、netexec、enum4linux-ng、ldapdomaindump、lsassy、smbmap、kerbrute、adidnsdump、certip…...
数据库管理-第151期 Oracle Vector DB AI-03(20240218)
数据库管理151期 2024-02-18 数据库管理-第151期 Oracle Vector DB & AI-03(20240218)1 向量数据库应用场景2 Oracle Vector DB3 Vector数据类型4 Vector运算5 Vector DML插入向量获取向量 总结 数据库管理-第151期 Oracle Vector DB & AI-03&am…...
Vue3+vite搭建基础架构(6)--- 使用vue-router
Vue3vite搭建基础架构(6)--- 使用vue-router 说明官方文档安装vue-router使用vue-router测试vue-router 说明 这里记录下自己在Vue3vite的项目使用vue-router的过程,不使用ts语法,方便以后直接使用。这里承接自己的博客Vue3vite搭…...
深入解析Android AIDL:实现跨进程通信的利器
深入解析Android AIDL:实现跨进程通信的利器 1. 介绍Android AIDL Android Interface Definition Language (AIDL) 是一种Android系统中的跨进程通信机制。AIDL允许一个应用程序的组件与另一个应用程序的组件通信,并在两者之间传输数据。 AIDL的主要作…...
【笔记】Helm-5 Chart模板指南-14 下一步
下一步 本指南旨在为chart开发者提供对如何使用Helm模板语言的强大理解能力。该模板聚焦于模板开发的技术层面。 但涉及到chart的实际日常开发时,很多内容本指南并没有覆盖到。这里有一些有用的文档链接帮助您创建新的chart: CNCF的 Artifact Hub 是ch…...
axios 官网速通
前言:参考 AXIOS 中文文档 一 起步 1. 介绍 1.1 Axios 是什么? Axios 是一个基于 promise 网络请求库,作用于 node.js 和浏览器中。在服务端使用 node.js 的 http 模块, 在客户端 (浏览端) 使用 XMLHttpRequests。 1.2 安装 $ npm instal…...
luigi,一个好用的 Python 数据管道库!
🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️付费专栏:Python专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前言 大家好,今天为大家分享一个超级厉害的 Python 库 - luigi。 Github地址:https://github.com/spotify/luigi 在大数据时代,处理海量数据已经成…...
用HTML5实现动画
用HTML5实现动画 要在HTML5中实现动画,可以使用以下几种方法:CSS动画、使用<canvas>元素和JavaScript来实现动画、使用JavaScript动画库。重点介绍前两种。 一、CSS动画 CSS3 动画:使用CSS3的动画属性和关键帧(keyframes&…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
