一文让你熟练使用 JSONObject 和 JSONArray

news/2024/4/16 19:29:41/文章来源:https://blog.csdn.net/m0_54355172/article/details/130336130

依赖

导入阿里的 fastjson 依赖。

        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version></dependency>

类型转换

String 与 JSON 相互转换

通过 JSONObject.parseObject(String str) 将字符串转换为 JSONObject 对象,此方法支持 JSON 字符串,JSON 字符串格式如下:

写法一:

{"code":"1","status":"success","target":"年入百万","msg":{"seq":"20230424","weather":"晴","salary":9000.00,"job":"摆地摊"},"goods":{"sum":2000.00,"manufacturer":{"address":"青口","boss":"张三"},"details":[{"name":"土豆","weight":"500斤"},{"name":"豆腐","weight":"250斤"}]}
}

写法二:

{"code":"1","status":"success","target":"年入百万","msg":{"seq":"20230424","weather":"晴","salary":9000.00,"job":"摆地摊"},"goods":{"sum":2000.00,"manufacturer":{"address":"青口","boss":"张三"},"details":[{"name":"土豆","weight":"500斤"},{"name":"豆腐","weight":"250斤"}]}}

转换案例代码:

        String JSONstr1 = "{\n" +"\t\"code\":\"1\",\n" +"\t\"status\":\"success\",\n" +"\t\"target\":\"年入百万\",\n" +"\t\"msg\":{\n" +"\t\t\"seq\":\"20230424\",\n" +"\t\t\"weather\":\"晴\",\n" +"\t\t\"salary\":9000.00,\n" +"\t\t\"job\":\"摆地摊\"\n" +"\t},\n" +"\t\"goods\":{\n" +"\t\t\"sum\":2000.00,\n" +"\t\t\"manufacturer\":{\n" +"\t\t\t\"address\":\"青口\",\n" +"\t\t\t\"boss\":\"张三\"\n" +"\t\t},\n" +"\t\t\"details\":[\n" +"\t\t\t{\n" +"\t\t\t\t\"name\":\"土豆\",\n" +"\t\t\t\t\"weight\":\"500斤\"\n" +"\t\t\t},\n" +"\t\t\t{\n" +"\t\t\t\t\"name\":\"豆腐\",\n" +"\t\t\t\t\"weight\":\"250斤\"\n" +"\t\t\t}\n" +"\t\t]\n" +"\t}\n" +"}";String JSONstr2 = "{\"code\":\"1\",\"status\":\"success\",\"target\":\"年入百万\",\"msg\":{\"seq\":\"20230424\",\"weather\":\"晴\",\"salary\":9000.00,\"job\":\"摆地摊\"},\"goods\":{\"sum\":2000.00,\"manufacturer\":{\"address\":\"青口\",\"boss\":\"张三\"},\"details\":[{\"name\":\"土豆\",\"weight\":\"500斤\"},{\"name\":\"豆腐\",\"weight\":\"250斤\"}]}}";JSONObject jsonObject1 = JSONObject.parseObject(JSONstr1);JSONObject jsonObject2 = JSONObject.parseObject(JSONstr2);System.out.println(jsonObject1);System.out.println(jsonObject2);

输出:


如果是 JSONArray 类型的字符串,如下:

		"details":[{"name":"土豆","weight":"500斤"},{"name":"豆腐","weight":"250斤"}]

则需要用 JSONArray.parseArray()


将 JSON 转换为 String,使用 toJSONString() ,如下:

        JSONObject jsonObject = new JSONObject();jsonObject.toJSONString();JSONObject.toJSONString(jsonObject);JSONArray JSONArray = new JSONArray();JSONArray.toJSONString();JSONArray.toJSONString(JSONArray);

JSON 与 实体类

@Slf4j
public class Test2 {public static void main(String[] args) {String roleStr = "{\"name\":\"张三\",\"age\":7}";Role role = JSONObject.parseObject(roleStr, Role.class);log.info(role.toString());log.info(role.getName());}
}@Data
@NoArgsConstructor
@AllArgsConstructor
class Role {private String name;private Integer age;}

JSON 与 Map

        Map<String, Object> map = new HashMap<>();map.put("name", "张三");map.put("age", 17);JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(map));

XML 与 Map 相互转换

https://blog.csdn.net/y1534414425/article/details/105770851

增删改查

获取数据

获取 JSONObject 数据:

根据 key 值获取对应的 value 数据。

        // 获取 target 的值,返回 StringString target = jsonObject2.getString("target");// 获取 code 的值,返回 ObjectObject code = jsonObject2.get("code");// 获取 msg 的值,返回 JSONObjectJSONObject msg = jsonObject2.getJSONObject("msg");// 获取 details 的值,返回 JSONArrayJSONArray jsonArray = jsonObject2.getJSONObject("goods").getJSONArray("details");

注意:当要获取的数据不存在于 JSONObject ,获取到的对象为 null,单不会报 NullPointerException,如果继续对此 null 对象获取数据,会报 NullPointerException 。


获取 JSONArray 数据:

根据索引位置返回对象,索引下标从 0 开始。

        // 获取索引为 0 处的 JSON 对象,返回 ObjectObject o = jsonArray.get(0);// 获取索引为 0 处的 JSON 对象,返回 JSONObjectJSONObject jsonObject = jsonArray.getJSONObject(0);

注意:如果要获取的数据不存在于 JSONArray 中,会报空指针。

移除数据

删除 JSONObject 中的数据:

        // 删除指定的 key ,返回被删除的数据 ObjectObject msg1 = jsonObject1.remove("msg");// 当 code 的值为 2 的时候才删除,删除成功返回 true,否则返回 falseboolean code1 = jsonObject1.remove("code", "2");

注意:要移除的元素不在 JSONObject 中,并不会抛出异常。


删除 JSONArray 中的数据:可通过 jsonArray.size() 获取 JSONArray 中的 JSONObject 个数。

        // 移除索引为 0 的 JSONObjectboolean remove1 = jsonArray.remove("0");// 移除指定的 JSONObjectboolean remove = jsonArray.remove(jsonArray.getJSONObject(0));List<JSONObject> jsonObjects = new ArrayList<>();for (Object obj : jsonArray) {jsonObjects.add((JSONObject) obj);}// 移除所有 JSONObjectboolean b = jsonArray.removeAll(jsonObjects);

注意:要移除的元素不在 JSONArray 中,并不会抛出异常。

新增数据

JSONObject 新增数据:

        JSONObject jsonObject = new JSONObject();// 插入 key-value ,如果已存在,则覆盖原来的 key 的 value,返回 ObjectObject tip = jsonObject.put("tip", "脱下长衫,摆摊致富");Map<String, Object> map = new HashMap<>();map.put("name", "大学生");map.put("major","通信工程");map.put("age", 22);// 插入 mapjsonObject.putAll(map);// 插入 key-value ,如果 key 已存在,则插入失败且返回已有的 key-valueObject tip1 = jsonObject.putIfAbsent("tip", "摆摊摆摊,日赚九千");// 将 map 作为 JSONObject 插入jsonObject.put("map", map);

JSONArray 新增数据:类似于 JSONObject,不过是 <索引 + Object>,而JSONObject 是 <key-value> 。

注意:JSONArray 给同一索引插入两次 JSONObject ,效果如下:

修改数据

        String str = "{\"code\":\"1\",\"status\":\"success\",\"target\":\"年入百万\",\"msg\":{\"seq\":\"20230424\",\"weather\":\"晴\",\"salary\":9000.00,\"job\":\"摆地摊\"},\"goods\":{\"sum\":2000.00,\"manufacturer\":{\"address\":\"青口\",\"boss\":\"张三\"},\"details\":[{\"name\":\"土豆\",\"weight\":\"500斤\"},{\"name\":\"豆腐\",\"weight\":\"250斤\"}]}}";JSONObject jsonObject = JSONObject.parseObject(str);// 替换对应 key 的 valuejsonObject.replace("code", 1);JSONObject msg = jsonObject.getJSONObject("msg");msg.replace("salary", 10000.00);jsonObject.replace("msg", msg);// 替换对应 key 的 oldValue 为 newValue,如果 oldValue 不存在,则不替换jsonObject.replace("target", "年入十万", "年入千万");

注意:jsonObject 的 put(String key, Object value) 也能达到 replace 的效果。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试2个月没有一个offer?阿里技术官的800页知识宝典打破你的僵局~

在经历了一波裁员浪潮后&#xff0c;大环境似乎有所好转&#xff0c;但对于面试者来说&#xff0c;面试愈发困难&#xff0c;现在面试官动不动就是底层原理&#xff0c;动不动就是源码分析&#xff0c;面试一定会抓你擅长的地方&#xff0c;一直问&#xff0c;问到你不会为止。…

集成学习(Ensembles)

Ensembles 前言EnsemblesAveraging,StackingWhy does averaging work?如何理解&#xff1a;In practice errors won’t be completely independent due to noise in the labels Random ForestsDoes averaging work if you use trees with the same parameters?Bootstrap Samp…

【手把手做ROS2机器人系统开发一】开发环境搭建

【手把手做ROS2机器人系统开发一】开发环境搭建 目录 【手把手做ROS2机器人系统开发一】开发环境搭建 一、专栏介绍&#xff1a; 二、开发环境搭建&#xff1a; 1.Ubuntu系统安装 2.ROS2系统环境安装 3.测试系统运行 一、专栏介绍&#xff1a; 大家好&#xff0c;今天给大家…

自然语言处理基本任务综述

文章目录 1.多语言分词2.词性标注3.命名实体识别4.中心词提取5.依存句法分析6.文本纠错7.文本摘要8.文本相似度9.情感分析10.文本分类11.词向量 1.多语言分词 ​ 在自然语言处理中&#xff0c;分词&#xff08;Tokenization&#xff09;是指将自然语言文本中的连续字符序列划分…

VRP开源的算例资源

VRP开源的算例资源 开源的算例资源 开源的MIP算例网址 1. MISOCP网址 Benchmark instances&#xff1a;多种问题的算例数据 TSP算例网址 VRP标杆算例网址 1. Networking and Emerging Optimization发布的VRP算例 2. PRP算例 3. 一个学者的主页上的算例 4. Chair in L…

MySQL-----复合查询

文章目录 前言一、基本查询回顾二、 多表查询解决多表查询的思路 三、自连接四、子查询1. 单行子查询2. 多行子查询3. 多列子查询4. 在from子句中使用子查询5. 合并查询5.1 union5.2 unoin all 总结 前言 前面的学习中,对于mysql表的查询都是对一张表进行查询,在实际开发中这远…

医药之家:19家医药企业获机构调研,8家公司接待超100家

据医药之家了解&#xff0c;4月17日至21日&#xff0c;两市约113家公司接受了机构调研&#xff0c;其中有19家为医药生物公司。从这19家医药生物公司的调研榜单来看&#xff0c;8家公司近5日接待机构家数超100家&#xff0c;分别是长春高新、国际医学、美好医疗、迪瑞医疗、祥生…

【中标通知】塔望咨询中标新疆农发集团 品牌规划建设项目

【新疆农发集团供应链有限公司-品牌建设项目】于2022年5月正式启动。 本次项目2022年4月6日招标结果正式公示。【塔望咨询】凭借3W消费战略方法体系和专注食品行业丰富的品牌项目经验&#xff0c;中标新疆农发集团供应链有限公司兵团红品牌规划建设项目。 中标结果公告 新疆农…

天梯赛 L3-025 那就别担心了

原题链接&#xff1a; PTA | 程序设计类实验辅助教学平台 题目描述&#xff1a; 下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题&#xff0c;其实都不用担心。 博主将这种逻辑推演称为“逻辑自洽”&#xff0c;即从某个命题出发的所有推理路径都会将结…

用java 实现二叉树创建

二叉树是数据结构中的一个重要的概念&#xff0c;二叉树的概念最早由 Linus Torvalds在1958年提出。他给出了一个树形数据结构&#xff0c;可以用来存储二叉树。每个节点的左子树和右子树都是空&#xff0c;中间层是子树。在一个给定的空间中&#xff0c;每一个节点都有两个左右…

相机雷达联合标定cam_lidar_calibration

文章目录 运行环境&#xff1a;1.1 ROS环境配置1&#xff09;工作空间创建和编译2&#xff09;官方数据集测试环境 2.1 在线标定1&#xff09;数据类型2&#xff09;标定板制作3&#xff09;配置文件4&#xff09;开始标定5&#xff09;完整实现步骤 3.1 python版本选择3.2 rvi…

4年的测试工程师,你遇到过自身瓶颈期吗?又是怎样度过的?

从毕业到现在已经快4年啦&#xff0c;一直软件测试行业混迹。我不是牛人&#xff0c;但是自我感觉还算是个合格的测试工程师&#xff0c;有必要写下自己将近4年来的经历&#xff0c;给自我以提示&#xff0c;给刚入行的朋友提供点参考。 貌似这一点适应的行业最广&#xff0c;…

Java——二叉搜索树的后序遍历序列

题目链接 牛客在线oj题——二叉搜索树的后序遍历序列 题目描述 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围&#xff1a; 节点数量 0≤n≤1000 …

自习室管理系统的设计与实现(论文+源码)_kaic

摘要 近年来&#xff0c;随着高校规模的逐步扩大&#xff0c;学生对高校自习室座位的需求也在不断增加。然而&#xff0c;一些高校仍然采用人工管理学院自习室座位&#xff0c;这大大降低了管理效率。显然&#xff0c;开发一个成本低、占用资源少、能提高高校自习室座位管理效率…

Junit 5 如何使用 Guice DI

Guice 是一个依赖注入的小清新工具。 相比 Spring 的依赖管理来说&#xff0c;这个工具更加小巧&#xff0c;我们可以在测试中直接使用。 Junit 5 在 Junit 中使用就没有那么方便了&#xff0c;因为 Junit 没有 Guice 的注解。 你需要手动写一个类&#xff0c;在这个类中&a…

ABeam Insight | 智能制造系列(6):虚拟/增强现实(VR/AR)×智能制造

虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;的概念早在20世纪60年代就被提出&#xff0c;但由于当时的技术水平无法满足相关应用的需求&#xff0c;这些概念并没有引起广泛关注。直到近年来随着计算机技术的飞速发展&#xff0c;虚拟现实和增强现…

nodejs+vue 文旅旅游公司智能管理OA系统

通过本次设计&#xff0c;让我学到了更多的知识&#xff0c;而且在设计中会有一些问题出现&#xff0c;最后通过查阅资料和在老师和同学的帮助下完成了系统的设计和开发&#xff0c;使得这次系统的开发非常的有意义。同时通过这次系统的设计也让我明白了自己在哪方面有不足&…

【PWN刷题__ret2text】[CISCN 2019华北]PWN1

ret2text~ 前言 依旧是简单的ret2text 一、checksec查看 No canary found 没有开启栈溢出保护 二、IDA反汇编 双击进入func() 发现后门函数system("cat/flag")&#xff1b;根据语义&#xff0c;函数提供了修改v1&#xff0c;判断v2是否等于11.28125&#xff0c;如…

项目沟通管理5大技巧 第4个很重要

1、充分使用twitter管理沟通模型 项目沟通会议可以充分使用witter的管理沟通模型&#xff0c;提高会议沟通效率。使用此模型&#xff0c;主要是有三步&#xff1a; 第一步&#xff1a;倾听&#xff0c;项目经理需要保持中立的立场&#xff0c;不先表态&#xff0c;让团队成员畅…

SAP ABAP 使用SICF发布HTTP API接口

一、SE24创建类&#xff1a;Z_HCX_HTTP 1、创建类&#xff1a; 2、切换到接口&#xff08;interface&#xff09;页签&#xff0c;输入IF_HTTP_EXTENSION &#xff0c;回车。切换到方法&#xff08;method&#xff09;页签&#xff0c;双击IF_HTTP_EXTENSION~HANDLE_REQUEST进…