Hutool JSON 操作教程

Hutool 提供了简洁强大的 JSON 工具类,主要包括 JSONUtilJSONObject/JSONArray

1. 引入依赖

XML 复制代码
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.26</version>
</dependency>

2. 创建 JSON 对象

2.1 直接创建

java 复制代码
// 创建 JSONObject
JSONObject json = JSONUtil.createObj();
json.set("name", "张三");
json.set("age", 25);
json.set("score", 99.5);
System.out.println(json); // {"name":"张三","age":25,"score":99.5}

// 链式调用
JSONObject json2 = JSONUtil.createObj()
    .set("name", "李四")
    .set("age", 30);

2.2 从 Map 创建

java 复制代码
Map<String, Object> map = new HashMap<>();
map.put("name", "王五");
map.put("age", 28);
JSONObject json = JSONUtil.parseObj(map);

2.3 从 Java Bean 创建

java 复制代码
User user = new User("赵六", 35, "北京");
JSONObject json = JSONUtil.parseObj(user);
// 忽略 null 值
JSONObject json2 = JSONUtil.parseObj(user, false);

3. 创建 JSON 数组

java 复制代码
// 直接创建
JSONArray array = JSONUtil.createArray();
array.add("苹果");
array.add("香蕉");
array.add("橙子");

// 从 List 创建
List<String> list = Arrays.asList("A", "B", "C");
JSONArray array2 = JSONUtil.parseArray(list);

// 从数组创建
String[] arr = {"x", "y", "z"};
JSONArray array3 = JSONUtil.parseArray(arr);

4. 字符串与 JSON 互转

4.1 字符串转 JSON

java 复制代码
String jsonStr = "{\"name\":\"张三\",\"age\":25}";

// 转 JSONObject
JSONObject json = JSONUtil.parseObj(jsonStr);

// 转 JSONArray
String arrayStr = "[1,2,3,4]";
JSONArray array = JSONUtil.parseArray(arrayStr);

4.2 JSON 转字符串

java 复制代码
JSONObject json = JSONUtil.createObj()
    .set("name", "张三")
    .set("age", 25);

// 转字符串(无格式)
String str = json.toString();

// 格式化输出(带缩进)
String prettyStr = json.toStringPretty();

5. JSON 与 Bean 互转

5.1 JSON 转 Bean

java 复制代码
String jsonStr = "{\"name\":\"张三\",\"age\":25,\"address\":\"北京\"}";
User user = JSONUtil.toBean(jsonStr, User.class);

// 泛型嵌套
String resultStr = "{\"code\":200,\"data\":{\"name\":\"李四\"}}";
Result<User> result = JSONUtil.toBean(resultStr, 
    new TypeReference<Result<User>>() {}, false);

5.2 Bean 转 JSON

java 复制代码
User user = new User("王五", 30, "上海");
JSONObject json = JSONUtil.parseObj(user);
String jsonStr = JSONUtil.toJsonStr(user);  // 直接转字符串

6. JSON 取值操作

java 复制代码
JSONObject json = JSONUtil.parseObj("{\"name\":\"张三\",\"age\":25,\"scores\":[90,85,95]}");

// 获取值
String name = json.getStr("name");      // "张三"
Integer age = json.getInt("age");        // 25
Double score = json.getDouble("score");  // null 不抛异常

// 带默认值
String city = json.getStr("city", "未知");

// 获取 JSONArray
JSONArray scores = json.getJSONArray("scores");
int firstScore = scores.getInt(0);  // 90

7. JSON 修改操作

java 复制代码
JSONObject json = JSONUtil.createObj();
json.set("name", "张三");
json.set("age", 25);

// 修改值
json.set("age", 26);

// 删除键
json.remove("age");

// 清空
json.clear();

// 判空
boolean empty = json.isEmpty();

8. XML 转 JSON

java 复制代码
String xml = "<user><name>张三</name><age>25</age></user>";
JSONObject json = JSONUtil.parseFromXml(xml);

// JSON 转 XML
String backToXml = JSONUtil.toXmlStr(json);

9. JSON 路径操作

java 复制代码
String jsonStr = "{\"store\":{\"book\":[{\"title\":\"Java编程\"},{\"title\":\"Python入门\"}]}}";
JSONObject json = JSONUtil.parseObj(jsonStr);

// 使用 JSONPath 获取值
Object titles = JSONUtil.getByPath(json, "$.store.book[*].title");
// 返回 ["Java编程", "Python入门"]

10. 实用工具方法

java 复制代码
// 判断是否为 JSON
boolean isJson = JSONUtil.isJson("{\"key\":\"value\"}");

// 判断是否为 JSONObject
boolean isObj = JSONUtil.isJsonObj("{\"key\":\"value\"}");

// 判断是否为 JSONArray
boolean isArray = JSONUtil.isJsonArray("[1,2,3]");

// 格式化 JSON 字符串
String ugly = "{\"a\":1,\"b\":2}";
String pretty = JSONUtil.formatJsonStr(ugly);

11. 完整示例

java 复制代码
public class HutoolJsonDemo {
    public static void main(String[] args) {
        // 1. 创建嵌套 JSON
        JSONObject root = JSONUtil.createObj()
            .set("code", 200)
            .set("message", "success")
            .set("data", JSONUtil.createObj()
                .set("userId", 1001)
                .set("userName", "张三")
                .set("roles", JSONUtil.createArray()
                    .add("admin")
                    .add("user")));
        
        // 2. 格式化输出
        System.out.println(root.toStringPretty());
        
        // 3. 获取数据
        String userName = root.getJSONObject("data").getStr("userName");
        System.out.println("用户名: " + userName);
        
        // 4. 转 Java Bean
        User user = root.getJSONObject("data").toBean(User.class);
        System.out.println(user);
        
        // 5. 遍历 JSONArray
        JSONArray roles = root.getJSONObject("data").getJSONArray("roles");
        roles.forEach(role -> System.out.println("角色: " + role));
    }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
class User {
    private Integer userId;
    private String userName;
    private List<String> roles;
}

注意事项

  1. 性能:高频场景下,考虑使用 Jackson 或 Fastjson 以获得更好性能

  2. 类型安全 :使用 getXXX() 方法时注意类型匹配

  3. 循环引用:Hutool JSON 默认会处理循环引用问题

  4. null 处理getStr() 等方法返回 null 而非抛出异常

Hutool 的 JSON 工具简单易用,适合大部分日常开发场景。

相关推荐
2401_887724502 小时前
Redis怎样统计独立访客UV_基于Set的SADD指令天然去重特性
jvm·数据库·python
qq_283720052 小时前
Python3 模块精讲:pyecharts —— 交互式数据可视化全解与实战
python·信息可视化·数据分析·echarts·数据可视化·pyecharts
m0_716430072 小时前
SQL如何处理时间序列缺失值_利用窗口函数进行前后值填充
jvm·数据库·python
dLYG DUMS2 小时前
Redis——使用 python 操作 redis 之从 hmse 迁移到 hset
数据库·redis·python
ZC跨境爬虫2 小时前
3D地球卫星轨道可视化平台开发 Day14(彻底移除多余阴影)
前端·javascript·3d·信息可视化·json
AI玫瑰助手2 小时前
Python基础:字符串的切片操作(含正向反向索引)
android·开发语言·python
2301_815279522 小时前
golang如何编译iOS库_golang编译iOS库实践
jvm·数据库·python
MapleWan320632 小时前
告别 AI IDE 配置碎片化:用 MSR-cli 打造你的本地 MCP / Rules / Skills 统一仓库
python·github
深蓝海拓2 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(十一)框架的进一步完善:UI的自动周期更新以及下行数据的生成和处理
网络·笔记·python·学习·ui·plc