jsonobject 实现了 map 接口,底层用 hashmap 或 linkedhashmap 存储键值对,支持标准 map 操作及 json 语义功能(如 tojsonstring、getstring 等),兼具灵活性与 json 合规性。

Java 中的 Map 接口本身和 JSONObject 并非继承关系,但 JSONObject(Fastjson)在设计上实现了 Map<string object></string> 接口,因此它具备 Map 的所有行为特征——这不是“继承”,而是“实现接口”。
JSONObject 实现了 Map 接口,不是继承 Map
Map 是 Java 集合框架中的一个接口,不能被直接继承;类只能继承一个父类(如 JSON),但可以实现多个接口。JSONObject 的声明清楚表明这一点:
public class JSONObject extends JSON implements Map<string object>, Cloneable, Serializable, InvocationHandler</string>
这意味着:
- 它底层以
HashMap或类似结构存储键值对(实际继承自LinkedHashMap衍生逻辑,保证插入顺序) - 你可以用
put()、get()、keySet()、entrySet()等标准 Map 方法操作它 - 它支持泛型约束:
String类型的 key,Object类型的 value(兼容任意 JSON 值:字符串、数字、嵌套对象、数组等)
为什么不用原生 Map 而要用 JSONObject?
普通 HashMap<string object></string> 不是 JSON,它只是内存中的数据容器。而 JSONObject 在实现 Map 的同时,还具备:
- JSON 语义能力:自动处理双引号包裹 key、null 值序列化、特殊字符转义等,确保输出符合 JSON 规范
-
序列化/反序列化集成:调用
toJSONString()直接生成标准 JSON 字符串;调用parseObject()可从字符串构建自身 -
类型安全取值方法:如
getString("name")、getInteger("age")、getJSONArray("list"),避免强制类型转换异常 -
嵌套支持:可自然包含其他
JSONObject或JSONArray,形成树状结构
Jackson 中没有 JSONObject,但有等效机制
Jackson 没有叫 JSONObject 的类,它的对应物是:
-
ObjectNode(继承自JsonNode,且实现了Map<string jsonnode></string>)——功能最接近 Fastjson 的JSONObject -
JsonNode是只读抽象基类,ObjectNode是可变版本,支持put()、set()、get()等操作 - 若你用
ObjectMapper.readValue(jsonStr, Map.class),得到的是普通LinkedHashMap,不具备 JSON 方法,也不保证 key 是 String(可能为 Integer 等,取决于原始 JSON)
实际使用中如何选择?
当你需要动态构造或解析未知结构的 JSON 数据时:
- 用
JSONObject(Fastjson):适合快速写业务逻辑、API 参数组装、日志字段拼装等,语法简洁直观 - 用
ObjectNode(Jackson):适合已接入 Jackson 生态的项目,尤其搭配 Spring Boot(默认 JSON 库),类型更严谨、安全性更高(如反序列化白名单) - 避免直接用
HashMap替代:它不校验 JSON 合法性,无法直接调用getLongValue()这类语义方法,易出ClassCastException
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











