1.4 与其他库的对比
定位差异
| 库 | 定位 | 核心能力 |
|---|---|---|
| JSONMap | JSON 数据操作 | 深层路径访问、智能构建、类型转换 |
| Jackson | JSON 序列化 | JSON ↔ 对象高性能转换 |
| FastJSON | JSON 序列化 | 高性能 JSON 解析 |
| Gson | JSON 序列化 | 简单易用的 JSON 解析 |
| Hutool JSONUtil | 工具集 | 大而全的工具集合 |
| JSONPath | JSON 查询 | 类 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");
| 特性 | Jackson | JSONMap |
|---|---|---|
| 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 够用)