JSONObject相关知识点

发布于:2025-07-25 ⋅ 阅读:(16) ⋅ 点赞:(0)

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 库,以便更针对性地讲解。


网站公告

今日签到

点亮在社区的每一天
去签到