一文让你熟练使用 JSONObject 和 JSONArray

news2024/11/23 23:13:17

依赖

导入阿里的 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 的值,返回 String
        String target = jsonObject2.getString("target");
        // 获取 code 的值,返回 Object
        Object code = jsonObject2.get("code");
        // 获取 msg 的值,返回 JSONObject
        JSONObject msg = jsonObject2.getJSONObject("msg");
        // 获取 details 的值,返回 JSONArray
        JSONArray jsonArray = jsonObject2.getJSONObject("goods").getJSONArray("details");

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


获取 JSONArray 数据:

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

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

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

移除数据

删除 JSONObject 中的数据:

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

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


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

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

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

新增数据

JSONObject 新增数据:

        JSONObject jsonObject = new JSONObject();
        // 插入 key-value ,如果已存在,则覆盖原来的 key 的 value,返回 Object
        Object tip = jsonObject.put("tip", "脱下长衫,摆摊致富");
        Map<String, Object> map = new HashMap<>();
        map.put("name", "大学生");
        map.put("major","通信工程");
        map.put("age", 22);
        // 插入 map
        jsonObject.putAll(map);
        // 插入 key-value ,如果 key 已存在,则插入失败且返回已有的 key-value
        Object 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 的 value
        jsonObject.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.coloradmin.cn/o/457211.html

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

相关文章

21、越狱调试

前言 调试一款应用,使用重签名方案,很容易被第三方察觉.在越狱环境中,我们可以在不污染App的情况下,对第三方程序进行动态调试 一、Reveal Reveal 是一款UI调试工具,对iOS逆向开发非常有帮助. 在Mac电脑中,安装Reveal软件: 密码 xclient.info 在手机中,安装Reveal插件打开C…

【京东】商品评价数据采集+买家评论数据+卖家评论数据采集+行业数据分析+行业数据质检分析

采集场景 京东商品详情页中的评价&#xff0c;有多个分类&#xff1a;【全部评价】、【晒图】、【视频晒单】、【追评】、【好评】、【中评】、【差评】。其中【全部评价】默认展现&#xff0c;其他需点击后展现。本文以按【差评】筛选采集为例讲解。实例网址&#xff1a;http…

MySQL-----复合查询

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

快速入门git(收藏篇)

大致总结&#xff1a; 本地仓库要先去github注册&#xff0c;并通过github的验证。于是本地仓库的文件均可通过协议传输至github任意一个仓库。本地文件要先传到本地仓库&#xff0c;由本地仓库传输至远程github仓库。 在详细学习git之前&#xff0c;我们先来看看Git和svn之间…

系统集成项目管理工程师 笔记(第七章:项目范围管理)

文章目录 7.1.1 项目范围管理的含义及作用7.1.2 项目范围管理的主要过程&#xff08;6个&#xff09; 7.2 编制范围管理计划和范围说明书 2687.2.1 编制范围管理计划过程所用的工具与技术7.2.2 编制范围管理计划过程的输入、输出 7.3 收集需求 2717.3.1 收集需求过程的工具与技…

java 网络编程总结

目录 一、拾枝杂谈 1.网络通信 : 2.网络 : 3.IP : 4.IPv4的ip地址分类 : 5.域名和端口 : 6.网络协议 : 二、网络编程 1.InetAddress : 1 常用方法 : 2 代码演示 : 2.Socket : 1 概述 : 2 代码演示 : eg1 : 客户端连接服务端 eg2 : 结束标记 eg3 : 网络传输文件…

Linux设置进程自启动

systemd学习 http://www.jinbuguo.com/systemd/systemctl.html https://blog.csdn.net/sinat_35815559/article/details/102867290 常用命令 立即启动一个服务&#xff1a; systemctl start xxx.service立即停止一个服务&#xff1a; systemctl stop xxx.service重启一个服…

跌倒检测和识别4:C++实现跌倒检测(含源码,可实时跌倒检测)

跌倒检测和识别4&#xff1a;C实现跌倒检测(含源码&#xff0c;可实时跌倒检测) 目录 跌倒检测和识别4&#xff1a;C实现跌倒检测(含源码&#xff0c;可实时跌倒检测) 1. 前言 2. 跌倒检测模型&#xff08;YOLOv5&#xff09; &#xff08;1&#xff09;跌倒检测模型训练 …

第14届蓝桥杯 | 冶炼金属

作者&#xff1a;指针不指南吗 专栏&#xff1a;第14届蓝桥杯真题 &#x1f43e;慢慢来&#xff0c;慢慢来&#x1f43e; 文章目录 题目代码摸索第一次 AC 5/10第二次 AC 100% 反思 题目 链接&#xff1a; 4956. 冶炼金属 - AcWing题库 小蓝有一个神奇的炉子用于将普通金属 O …

【LeetCode】数据结构刷题(2)[查找链表的中间节点]

【LeetCode】数据结构刷题&#xff08;2&#xff09; 1.题目来源2.题目描述3.解题思路4.代码展示5.类似题目练习 所属专栏&#xff1a;玩转数据结构题型 博主首页&#xff1a;初阳785 代码托管&#xff1a;chuyang785 感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持…

自动驾驶方案及相关对标

华为&#xff1a; 2021年4月18日&#xff0c;在华为智能汽车解决方案BU新品发布会上&#xff0c;华为智能汽车解决方案BU总裁王军表示&#xff0c;华为要持续加大对汽车行业的投入&#xff0c;今年在研发上的投资将达到10亿美元&#xff0c;未来每年保持30%左右增长&#xff0…

three.js的着色器(巨详细 初学者 大白话)

three.js就不过多介绍了 可以看另一篇文章 总结就是场景 相机 和 渲染器 学起来 也比较轻松 后来看到了着色器 给我整懵乐了 一会一个API 一会一个API 都没见过 然后就一点点去学习 真的是费了好大劲了 需要知道很多新东西 才能初步知道和使用着色器 当然如果只是简单的使…

docker-harbor私有仓库的部署与管理

目录 Harbor Harbor介绍 Harbor的特性 Harbor的构成 部署Harbor 搭建本地私有仓库 Docker容器的重启策略 部署Docker-compose服务 部署Harbor服务 关于Harbor.cfg配置文件中两类参数 启动Harbor 查看 Harbor 启动镜像 创建一个新项目 在其他客户端上传镜像 维护管…

如何创建 2023 年营销日历(内含免费模板和示例)

沟通、文案撰写、社媒营销、点击付费广告、事件营销和搜索引擎排名优化有什么共同点&#xff1f; 它们都属于营销部门的工作范畴&#xff0c;而且很可能是围绕着同一个日程表进行工作排期。 你的营销团队比你想象的要大&#xff0c;当你考虑跨职能项目和团队成员在你整体战略…

ImageJ 用户手册——第四部分(ImageJ用户界面)

ImageJ 用户手册——第四部分&#xff08;ImageJ用户界面&#xff09; ImageJ用户界面工具栏&#xff08;Toolbar&#xff09;状态栏进度条19. 工具19.1 区域选择工具19.1.1 矩形选择工具19.1.2 圆角矩形选择工具19.1.3 圆形选择工具19.1.4 椭圆选择工具19.1.5 笔刷选择工具19.…

内网渗透基础-域环境搭建

一、环境准备 1.1虚拟机安装 Mac环境&#xff1a; vmware fusion&#xff1b;parallels desktop。 windows环境&#xff1a; vmware&#xff1b;virtualbox; 有习惯用其他软件的也都一样的&#xff0c;下载安装可以找百度教程。 1.2虚拟机三种网络配置模式 桥接模式&am…

塔望3W消费战略全案丨阳澄湖牌大闸蟹:承诺就是价值,打响官方第一枪

阳澄湖牌 大闸蟹 客户&#xff1a;苏州市阳澄湖大闸蟹营销有限公司 品牌&#xff1a;阳澄湖/阳澄湖牌 服务&#xff1a;3W消费战略 品牌全案 项目背景 苏州市阳澄湖大闸蟹营销有限公司是由苏州市相城区阳澄湖大闸蟹集团公司、苏州市阳澄湖现代农业产业园特种水产养殖有限公…

Springboot整合elasticsearch

​ 前言 elasticsearch基本介绍&#xff0c;这篇文章介绍了elasticsearch安装和使用。下面根据网上查来的各种资料&#xff0c;总结如何在springboot中使用elasticsearch。 文章中用es代替elasticsearch。 依赖 springboot版本是2.0&#xff0c;es版本用的是7.6.2。不同的…

专业做护眼灯的有哪些品牌?盘点专业护眼灯品牌排行

护眼灯是家庭照明必备的工具&#xff0c;专业做护眼灯的却不多&#xff0c;许多家长找不到合适的护眼灯&#xff0c;我就根据标准GB/T 9473-2017《读写作业台灯性能要求》&#xff0c;筛选出五款合适国人使用的护眼灯。 TOP1、南卡护眼台灯Pro 光源舒适度&#xff1a;❤❤❤❤…

电子工程有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是电子工程领域的SCI期刊推荐&#xff1a; IEEE Transactions on Electron Devices&#xff1a; 该期刊是IEEE出版社的顶级期刊&#xff0c;涵盖电子学、固态电子学、电子器件、材料科学等多个领域。 IEEE Transactions on Industrial Electronics&#xff1a; 该期刊是I…