当前位置: 首页 > news >正文

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字符串&#xff08;1&#xff09;如果json格式字符串 &#xff0c;最外层 是 中括号&#xff0c;表示数组&#xff0c;就使用方法&#xff08;2&#xff09;如果json格式字符串&#xff0c;最外层是 大括号&#xff0c;表示对象&#xff0c;就是…...

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 非常像&#xff0c;但又很不一样&#xff0c;很容易掉坑里。 题目链接/文章讲解 视频讲解 46.全排列 本题重点感受一下&#xff0c;排列问题 与 组合问题&#xff0c;组合总和&#xff0c;子集问题的区别。 为什么排列问题不用…...

专业140+总分420+南京信息工程大学811信号与系统考研经验南信大电子信息与通信工程,真题,大纲,参考书

今年顺利被南信大电子信息录取&#xff0c;初试420&#xff0c;专业811信号与系统140&#xff08;Jenny老师辅导班上140很多&#xff0c;真是大佬云集&#xff09;&#xff0c;今年应该是南信大电子信息最卷的一年&#xff0c;复试线比往年提高了很多&#xff0c;录取平均分380…...

一元函数微分学【高数笔记】

1. 什么是微分&#xff1f;什么是微商&#xff1f; 2. 什么是函数的微分&#xff1f; 3. 在函数的微分中&#xff0c;有什么样的关系&#xff1f; 4. 一元函数的微分运用在什么题型中&#xff1f; 5. 什么是一元函数&#xff1f;...

(16)Hive——企业调优经验

前言 本篇文章主要整理hive-3.1.2版本的企业调优经验&#xff0c;有误请指出~ 一、性能评估和优化 1.1 Explain查询计划 使用explain命令可以分析查询计划&#xff0c;查看计划中的资源消耗情况&#xff0c;定位潜在的性能问题&#xff0c;并进行相应的优化。 explain执行计划…...

【详解】图的概念和存储结构(邻接矩阵,邻接表)

目录 图的基本概念&#xff1a; 图的存储结构 邻接矩阵&#xff08;GraphByMatrix&#xff09;&#xff1a; 基本参数&#xff1a; 初始化&#xff1a; 获取顶点元素在其数组中的下标 &#xff1a; 添加边和权重&#xff1a; 获取顶点的度&#xff1a; 打印图&#xf…...

【AIGC】Stable Diffusion介绍

Stable Diffusion 是一个基于 OpenAI 的 Diffusion 模型的扩展版本&#xff0c;它采用了稳定扩散&#xff08;Stable Diffusion&#xff09;的技术&#xff0c;旨在提高图像生成和处理的质量。下面是 Stable Diffusion 的详细介绍&#xff1a; 基于 Diffusion 的图像生成&…...

2024.2.18 C++QT 作业

思维导图 练习题 1>定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std;class Animal { public:virtual void perform() {cout << "这是一个动…...

【qt创建线程两种方式】

QT使用线程的两种方式 1.案例进度条 案例解析&#xff1a; 如图由组件一个进度条和三个按钮组成&#xff0c;当点击开始的时候进度条由0%到100%&#xff0c;点击暂停&#xff0c;进度条保持之前进度&#xff0c;再次点击暂停变为继续&#xff0c;点击停止按钮进度条停止。 案…...

网络安全-一句话木马

声明 遵纪守法 请严格遵守网络安全法相关条例&#xff01; 此分享主要用于交流学习&#xff0c;请勿用于非法用途&#xff0c;一切后果自付。 一切未经授权的网络攻击均为违法行为&#xff0c;互联网非法外之地。 反制 大家在知道了常规一句话的木马之后&#xff0c;就可以通…...

在k8s中,使用DirectPV CSI作为分布式存储的优缺点

DirectPV 提供了一种直接将物理卷(Physical Volumes)与 Kubernetes 集群中的 Pod 绑定的机制。 利用 DirectPV,你可以将相应的 PV 直接与节点上的物理存储设备(如磁盘)进行绑定,而无需通过网络存储服务(如 NFS 或 Ceph)来提供存储。这种直接访问物理卷的方式,有助于提…...

自动化AD域枚举和漏洞检测脚本

linWinPwn 是一个 bash 脚本&#xff0c;可自动执行许多 Active Directory 枚举和漏洞检查。该脚本基于很多现有工具实现其功能&#xff0c;其中包括&#xff1a;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&#xff08;20240218&#xff09;1 向量数据库应用场景2 Oracle Vector DB3 Vector数据类型4 Vector运算5 Vector DML插入向量获取向量 总结 数据库管理-第151期 Oracle Vector DB & AI-03&am…...

Vue3+vite搭建基础架构(6)--- 使用vue-router

Vue3vite搭建基础架构&#xff08;6&#xff09;--- 使用vue-router 说明官方文档安装vue-router使用vue-router测试vue-router 说明 这里记录下自己在Vue3vite的项目使用vue-router的过程&#xff0c;不使用ts语法&#xff0c;方便以后直接使用。这里承接自己的博客Vue3vite搭…...

深入解析Android AIDL:实现跨进程通信的利器

深入解析Android AIDL&#xff1a;实现跨进程通信的利器 1. 介绍Android AIDL Android Interface Definition Language (AIDL) 是一种Android系统中的跨进程通信机制。AIDL允许一个应用程序的组件与另一个应用程序的组件通信&#xff0c;并在两者之间传输数据。 AIDL的主要作…...

【笔记】Helm-5 Chart模板指南-14 下一步

下一步 本指南旨在为chart开发者提供对如何使用Helm模板语言的强大理解能力。该模板聚焦于模板开发的技术层面。 但涉及到chart的实际日常开发时&#xff0c;很多内容本指南并没有覆盖到。这里有一些有用的文档链接帮助您创建新的chart&#xff1a; CNCF的 Artifact Hub 是ch…...

axios 官网速通

前言&#xff1a;参考 AXIOS 中文文档 一 起步 1. 介绍 1.1 Axios 是什么&#xff1f; Axios 是一个基于 promise 网络请求库&#xff0c;作用于 node.js 和浏览器中。在服务端使用 node.js 的 http 模块, 在客户端 (浏览端) 使用 XMLHttpRequests。 1.2 安装 $ npm instal…...

luigi,一个好用的 Python 数据管道库!

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️付费专栏:Python专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前言 大家好,今天为大家分享一个超级厉害的 Python 库 - luigi。 Github地址:https://github.com/spotify/luigi 在大数据时代,处理海量数据已经成…...

用HTML5实现动画

用HTML5实现动画 要在HTML5中实现动画&#xff0c;可以使用以下几种方法&#xff1a;CSS动画、使用<canvas>元素和JavaScript来实现动画、使用JavaScript动画库。重点介绍前两种。 一、CSS动画 CSS3 动画&#xff1a;使用CSS3的动画属性和关键帧&#xff08;keyframes&…...

【Linux笔记】进程间通信之管道

一、匿名管道 我们在之前学习进程的时候就知道了一个概念&#xff0c;就是进程间是互相独立的&#xff0c;所以就算是两个进程是父子关系&#xff0c;其中一个进程退出了也不会影响另一个进程。 也因为进程间是互相独立的&#xff0c;所以两个进程间就不能直接的传递信息或者…...

【Node-RED】安全登陆时,账号密码设置

【Node-RED】安全登陆时&#xff0c;账号密码设置 前言实现步骤密码生成setting.js 文件修改 安全权限 前言 Node-RED 在初始下载完成时&#xff0c;登录是无账号密码的。基于安全性考虑&#xff0c;本期博文介绍在安全登陆时&#xff0c;如何进行账号密码设置。当然&#xff…...

Kubernetes基础(二十一)-k8s的服务发现机制

1 概述 Kubernetes&#xff08;K8s&#xff09;是一个强大的容器编排平台&#xff0c;提供了丰富的功能来简化容器化应用的管理。其中之一重要的特性就是服务发现机制&#xff0c;它使得应用程序能够在K8s集群中动态地发现和访问其他服务。本文将深入研究K8s中的服务发现机制&…...

华纳云:docker更新容器镜像的常用方法

更新 Docker 容器镜像可以通过以下几种方法实现&#xff1a; 1. 使用 docker pull 命令手动拉取更新的镜像&#xff1a; docker pull <镜像名>:<标签> 这会拉取指定镜像的最新版本或者指定标签的版本到本地。然后您可以停止并删除现有的容器&#xff0c;使用新的镜…...

什么时候会触发FullGC?描述一下JVM加载class文件的原理机制?

什么时候会触发 FullGC&#xff1f; 除直接调用 System.gc 外&#xff0c;触发 Full GC 执行的情况有如下四种。 1. 旧生代空间不足 旧生代空间只有 在新生代对象转入及创建为大对象、大数组时才会出现不足的现象&#xff0c;当执行 Full GC 后空间仍然不 足&#xff0c;则…...

HCIP-MGRE实验配置、PPP的PAP认证与CHAP认证、MGRE、GRE网络搭建、NAT

实验要求 R5为ISP,只能进行IP地址配素&#xff0c;其所有地址均为公有IP地址R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方 R2与R5之间使用PPP的chap认证&#xff0c;R5为主认证方 R3与R5之间使用HDLC封装。R1/R2/R3构建一个MGRE环境&#xff0c;R1为中心站点;R1、R4间为…...

react【四】css

文章目录 1、css1.1 react和vue css的对比1.2 内联样式1.3 普通的css1.4 css modules1.5 在react中使用less1.6 CSS in JS1.6.1 模板字符串的基本使用1.6.2 styled-components的基本使用1.6.3 接受传参1.6.4 使用变量1.6.5 继承样式 避免代码冗余1.6.6 设置主题色 1.7 React中添…...

SpringIOC之support模块SimpleThreadScope

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…...

气味是否能通过光缆、信号传播?

搜索资料&#xff0c;有一点点眉目&#xff0c; 参考&#xff1a;未来网络可以传送气味 如何产生并被感知--双鸭山新闻网...

安装部署k8s集群

系统&#xff1a; CentOS Linux release 7.9.2009 (Core) 准备3台主机 192.168.44.148k8s-master92.168.44.154k8s-worker01192.168.44.155k8s-worker02 3台主机准备工作 关闭防火墙和selinux systemctl disable firewalld --nowsetenforce 0sed -i s/SELINUXenforcing/SELI…...