当前位置: 首页 > 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.dtcms.com/a/296872.html

相关文章:

  • 嵌入式通信知识串讲:从同步 / 异步传输到 UART 协议 STM32F103 硬件解析
  • 大模型提示词漏洞攻防测试:技术分析与实践指南
  • 客户关系管理(CRM)百科:定义、价值及发展趋势
  • JMeter 性能测试实战笔记
  • Javascript NaN Symbol BigInt
  • 论文阅读:《无约束多目标优化的遗传算法,群体和进化计算》
  • 【25-cv-3322、25-cv-3323】Aeropostale连发两案!12个商标冻住600多家店铺
  • Android集成Google Map
  • 基于自适应控制算法的SVC与STATCOM联合优化
  • 如何在IEEE上检索文献|综述性文献
  • springboot 一键下载文件
  • Linux操作系统原理与应用
  • 河南萌新联赛2025第(二)场:河南农业大学
  • 使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)
  • 基于STM32智能鱼缸监控投喂系统
  • Kubernetes 集群架构和Pod创建流程
  • 优选算法:移动零
  • 激光雷达的单播和广播模式介绍
  • 2025年海外短剧独立站开发:H5+PC端双平台技术实践与增长策略
  • 处理HTTP请求体:精通`@RequestBody`、`@RequestHeader`与`@CookieValue`
  • 计算机视觉技术剖析:轮廓检测、模板匹配及特征点匹配
  • SpringBoot框架简介
  • Windows本地部署DeepSeek
  • git更新内核补丁完整指南
  • 【C++】使用中值滤波算法过滤数据样本中的尖刺噪声
  • Java 并发容器:ConcurrentHashMap 笔记(JDK 1.8)
  • 01_FOC学习之先让电机转动起来
  • 双紫擒龙紫紫红黄安装使用攻略,2025通达信指标源码,擒龙追踪源码公式学习
  • 爬虫基础概念
  • 浏览器访问[http://www.taobao.com](http://www.taobao.com/),经历了怎样的过程。