跳到主要内容

1.4 与其他库的对比

← 返回文档导航


定位差异

定位核心能力
JSONMapJSON 数据操作深层路径访问、智能构建、类型转换
JacksonJSON 序列化JSON ↔ 对象高性能转换
FastJSONJSON 序列化高性能 JSON 解析
GsonJSON 序列化简单易用的 JSON 解析
Hutool JSONUtil工具集大而全的工具集合
JSONPathJSON 查询类 XPath 的查询语法

vs Jackson

JSONMap 基于 Jackson 构建,两者互补:

// Jackson — JSON ↔ 对象
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(json);
String city = root.at("/user/profile/addresses/0/city").asText();

// JSONMap — 拿到数据后操作
String city = new JSONMap(json).getStr("user.profile.addresses[0].city");
特性JacksonJSONMap
JSON 解析核心能力基于 Jackson
深层取值at("/a/b/c")getStr("a.b.c")
负索引不支持arr[-1]
自动构建不支持set("a.b.c", v)
类型转换需指定类型自动转换

vs FastJSON

// FastJSON
JSONObject json = JSON.parseObject(jsonStr);
String city = json.getJSONObject("user")
.getJSONObject("profile")
.getJSONArray("addresses")
.getJSONObject(0)
.getString("city");

// JSONMap
String city = new JSONMap(jsonStr).getStr("user.profile.addresses[0].city");

FastJSON 性能好,但代码冗长。两者可以共存。


vs Hutool JSONUtil

// Hutool
JSONObject json = JSONUtil.parseObj(jsonStr);
Object city = JSONUtil.getByPath(json, "user.profile.addresses[0].city");

// JSONMap
String city = new JSONMap(jsonStr).getStr("user.profile.addresses[0].city");

Hutool 功能全面,JSONMap 更专注、体积小(~100KB)。


vs JSONPath

// JSONPath — 复杂查询
List<String> names = JsonPath.read(json, "$.users[?(@.age > 25)].name");

// JSONMap — 简单路径
String name = new JSONMap(json).getStr("users[0].name");

JSONPath 适合复杂查询(过滤、函数),JSONMap 适合日常读写操作。


选择建议

选 JSONMap 如果

  • 需要深层路径取值
  • 需要动态构建嵌套结构
  • 需要自动类型转换
  • 需要轻量依赖

不选 JSONMap 如果

  • 只需要 JSON 序列化(Jackson/Gson 够用)
  • 需要复杂 JSON 查询(用 JSONPath)
  • 数据结构固定且简单(HashMap 够用)

← 上一节:核心概念 | 返回文档导航 | 下一章:核心功能 →