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 结构(如获取子
JSONObject
或JSONArray
)
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 中实际类型(如数字可能是
int
或long
,避免强转错误)。 - 空值处理:
getXxx()
方法在键不存在时可能返回null
(如getString()
),建议使用getXxxValue()
系列方法(返回默认值,如getIntValue()
不存在时返回 0)。 - 性能与安全:
- fastjson 性能较好,但需注意版本安全(避免使用存在漏洞的旧版本)。
- 解析未知 JSON 时,需警惕注入风险(如恶意构造的 JSON 导致解析异常)。
- 嵌套结构:对于复杂 JSON,可通过
getJSONObject()
和getJSONArray()
逐层解析。
5. 应用场景
- 接口数据交互(接收/返回 JSON 格式数据)
- 配置文件解析(JSON 格式的配置)
- 数据格式转换(如将对象转为 JSON 存储或传输)
如果需要具体库的详细用法,可以进一步说明是 fastjson
还是 org.json
库,以便更针对性地讲解。