1. 整体与部分的关系
Hutool 是一个完整的 Java 工具库,而 JSONUtil 是 Hutool 中的一个专门处理 JSON 的工具类。
可以这样理解:
- Hutool = 整个工具箱
- JSONUtil = 工具箱里的 "JSON专用工具"
2. 依赖关系
最小依赖(推荐):
xml
<!-- 只引入 JSON 功能 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-json</artifactId>
<version>5.8.38</version>
</dependency>
完整依赖:
xml
<!-- 引入所有 Hutool 功能 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.38</version>
</dependency>
3. JSONUtil 在 Hutool 中的位置
Hutool 采用模块化设计,JSONUtil 属于 hutool-json
模块:
js
Hutool 工具库
├── hutool-core (核心工具)
├── hutool-json (JSON处理) ← JSONUtil 在这里
├── hutool-http (HTTP客户端)
├── hutool-ai (AI功能)
├── hutool-db (数据库操作)
└── ...其他模块
4. JSONUtil 的核心功能
基本转换
java
import cn.hutool.json.JSONUtil;
// 对象转 JSON 字符串
User user = new User("张三", 25);
String jsonStr = JSONUtil.toJsonStr(user);
// 输出: {"name":"张三","age":25}
// JSON 字符串转对象
User userObj = JSONUtil.toBean(jsonStr, User.class);
// 解析 JSON 为 JSONObject
JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
String name = jsonObject.getStr("name"); // "张三"
复杂 JSON 操作
java
// 创建复杂 JSON
String json = JSONUtil.createObj()
.set("code", 200)
.set("message", "成功")
.set("data", JSONUtil.createObj()
.set("user", user)
.set("token", "abc123")
).toString();
// 解析和操作
JSONObject parsed = JSONUtil.parseObj(json);
int code = parsed.getInt("code");
JSONObject data = parsed.getJSONObject("data");
与 SaResult 结合使用
java
// 成功响应
String successJson = JSONUtil.toJsonStr(
SaResult.ok().setData(userList)
);
// 错误响应
String errorJson = JSONUtil.toJsonStr(
SaResult.error("用户不存在")
);
5. 为什么使用 JSONUtil 而不是其他 JSON 库?
相比原生 Jackson/Gson:
java
// 使用 Jackson (原生)
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(object);
MyClass obj = mapper.readValue(json, MyClass.class);
// 使用 Hutool JSONUtil (更简洁)
String json = JSONUtil.toJsonStr(object);
MyClass obj = JSONUtil.toBean(json, MyClass.class);
优势:
- API 更简洁:方法名直观易记
- 链式调用:支持流畅的链式编程
- 异常处理:默认处理了大部分异常情况
- 与 Hutool 生态集成:可以和其他 Hutool 工具无缝配合
6. 实际项目中的典型用法
java
@RestController
public class UserController {
@GetMapping("/users")
public String getUsers() {
try {
List<User> users = userService.findAll();
// 使用 Hutool JSONUtil 构建响应
return JSONUtil.toJsonStr(
SaResult.ok("查询成功")
.setData(users)
.set("total", users.size())
);
} catch (Exception e) {
// 统一的错误响应格式
return JSONUtil.toJsonStr(
SaResult.error("查询失败: " + e.getMessage())
);
}
}
}
总结
- Hutool 是整体工具库
- JSONUtil 是 Hutool 中专门处理 JSON 的工具类
- 可以单独引入
hutool-json
模块,也可以引入完整的hutool-all
- JSONUtil 提供了比原生 JSON 库更简洁、易用的 API
- 在 Web 开发中常用于接口响应的 JSON 序列化
这种设计让开发者可以根据需要按模块引入,既保持了功能的完整性,又避免了依赖冗余。