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

JSONObject相关知识点

JSONObject相关知识点

JSONObject 相关的知识要点。JSONObject 是许多 Java 开发库(最常见的是阿里巴巴的 fastjson 和 JSON 官方的 org.json 库)中用于处理 JSON 数据的核心类,主要用于解析、构建和操作 JSON 格式的数据。

以下是 JSONObject 的核心知识要点:

1. 所属库

  • fastjson(阿里):com.alibaba.fastjson.JSONObject(应用广泛,性能优秀)
  • org.json(官方):org.json.JSONObject(基础 JSON 处理库)
  • 其他库(如 Gson 有类似功能的类,但通常不直接叫 JSONObject

2. 核心功能

JSONObject 本质是一个 键值对集合(类似 Map),键是字符串,值可以是字符串、数字、布尔值、数组、嵌套的 JSONObject 等,对应 JSON 数据的结构。

主要功能包括:

  • 解析 JSON 字符串为 JSONObject 对象
  • JSONObject 转换为 JSON 字符串
  • 新增、获取、修改、删除 JSON 中的键值对
  • 处理嵌套的 JSON 结构(如获取子 JSONObjectJSONArray

3. 常用方法(以 fastjson 为例)

(1)创建与解析
// 1. 从 JSON 字符串解析
String jsonStr = "{\"name\":\"张三\",\"age\":20,\"isStudent\":true}";
JSONObject jsonObj = JSONObject.parseObject(jsonStr);// 2. 手动构建
JSONObject jsonObj = new JSONObject();
jsonObj.put("name", "张三");
jsonObj.put("age", 20);
jsonObj.put("isStudent", true);
(2)获取值
// 获取基本类型(需指定键和默认值,避免空指针)
String name = jsonObj.getString("name"); // "张三"
int age = jsonObj.getIntValue("age"); // 20
boolean isStudent = jsonObj.getBooleanValue("isStudent"); // true// 获取嵌套的 JSONObject 或 JSONArray
JSONObject address = jsonObj.getJSONObject("address"); // 子对象
JSONArray hobbies = jsonObj.getJSONArray("hobbies"); // 数组
(3)转换与序列化
// 转换为 JSON 字符串
String jsonStr = jsonObj.toJSONString(); 
// 输出:{"name":"张三","age":20,"isStudent":true}// 转换为 Java 对象(需定义对应的实体类)
User user = jsonObj.toJavaObject(User.class);
(4)其他操作
// 判断是否包含某个键
boolean hasName = jsonObj.containsKey("name"); // 删除键值对
jsonObj.remove("age");// 获取所有键
Set<String> keys = jsonObj.keySet();

4. 注意事项

  • 类型匹配:获取值时需注意 JSON 中实际类型(如数字可能是 intlong,避免强转错误)。
  • 空值处理getXxx() 方法在键不存在时可能返回 null(如 getString()),建议使用 getXxxValue() 系列方法(返回默认值,如 getIntValue() 不存在时返回 0)。
  • 性能与安全
    • fastjson 性能较好,但需注意版本安全(避免使用存在漏洞的旧版本)。
    • 解析未知 JSON 时,需警惕注入风险(如恶意构造的 JSON 导致解析异常)。
  • 嵌套结构:对于复杂 JSON,可通过 getJSONObject()getJSONArray() 逐层解析。

5. 应用场景

  • 接口数据交互(接收/返回 JSON 格式数据)
  • 配置文件解析(JSON 格式的配置)
  • 数据格式转换(如将对象转为 JSON 存储或传输)

如果需要具体库的详细用法,可以进一步说明是 fastjson 还是 org.json 库,以便更针对性地讲解。

http://www.lryc.cn/news/598851.html

相关文章:

  • 【MediaTek】AN7563编译出现npu/en7563/host/Makefile: No such file or directory
  • Silly Tavern 教程②:首次启动与基础设置
  • Windows 如何更改 ModelScope 的模型下载缓存位置?
  • 循环神经网络--LSTM模型
  • 跨境支付入门~国际支付结算(区块链篇)
  • 推荐系统如何开发
  • AI大模型资源
  • Spring Boot 遇上 MyBatis-Plus:高效开发的奇妙之旅
  • 10_Spring Boot 中的 @Scheduled 注解是单线程还是多线程?同步还是异步?
  • Percona pt-archiver 出现长事务
  • IntelliJ IDEA
  • 单片机的第一个程序—LED灯的控制
  • HBase + PostgreSQL + ElasticSearch 联合查询方案
  • 斐波那契数列策略
  • 新能源电池厂自动化应用:Modbus TCP转DeviceNet实践
  • Opencv C# 重叠 粘连 Overlap 轮廓分割 (不知道不知道)
  • C语言(长期更新)第5讲:数组练习(三)
  • windows11通过wsl安装Ubuntu到D盘,安装docker及宝塔面板
  • 【物联网】基于树莓派的物联网开发【16】——树莓派GPIO控制LED灯实验
  • 卫星物联网:使用兼容 Arduino 的全新 Iridium Certus 9704 开发套件深入探索
  • MSOP/DIFOP端口 vs. IP地址的关系以及每个IP下面有什么自己的东西
  • JavaSE:对一门面向对象语言有一个初步认识
  • pytest官方Tutorial所有示例详解(二)
  • 这几天都是发癫写的
  • 计算机视觉技术剖析:轮廓检测、模板匹配及特征点匹配
  • 背包DP之分组背包
  • 读书笔记(王阳明心学)
  • 高可用架构模式——异地多活设计步骤
  • 物流仓储自动化升级:Modbus TCP与DeviceNet的协议融合实践
  • C++实战:人脸识别7大核心实例