 JSON 工具 - JSONUtil
JSON 工具 - JSONUtil
 # JSON 工具 - JSONUtil
 简介
JSONUtil 是 Hutool 提供的一个强大的 JSON 操作工具类,主要用于 JSON 的创建、解析、转换和格式化。它封装了常见的 JSON 处理操作,使得在 Java 中操作 JSON 变得更加简单和高效。JSONUtil 涉及的操作包括将对象转换为 JSON 字符串、解析 JSON 字符串、XML 与 JSON 的相互转换等功能,极大简化了开发中的数据处理工作。
# 1. toJsonStr 和 toJsonPrettyStr 方法
 toJsonStr 方法用于将任意对象转换为 JSON 字符串,而 toJsonPrettyStr 则用于生成格式化的、更加可读的 JSON 字符串。
# 示例:将对象转换为 JSON 字符串
import cn.hutool.json.JSONUtil;
import java.util.SortedMap;
import java.util.TreeMap;
public class JSONUtilExample {
    public static void main(String[] args) {
        // 创建有序的 SortedMap 对象
        SortedMap<Object, Object> sortedMap = new TreeMap<Object, Object>() {
            private static final long serialVersionUID = 1L;
            {
                put("attributes", "a");
                put("b", "b");
                put("c", "c");
            }
        };
        // 将对象转换为 JSON 字符串
        String jsonStr = JSONUtil.toJsonStr(sortedMap);
        System.out.println("JSON 字符串: " + jsonStr); // {"attributes":"a","b":"b","c":"c"}
        // 生成格式化的 JSON 字符串
        String prettyJsonStr = JSONUtil.toJsonPrettyStr(sortedMap);
        System.out.println("格式化的 JSON 字符串:\n" + prettyJsonStr);
        /* 输出:
        {
            "attributes": "a",
            "b": "b",
            "c": "c"
        }
        */
    }
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
- toJsonStr(Object obj):将对象转换为 JSON 字符串。- obj:需要转换为 JSON 的对象,可以是任意类型(如 JavaBean、Map、List)。
- 返回值:返回 JSON 格式的字符串。
 
- toJsonPrettyStr(Object obj):生成格式化的 JSON 字符串,便于阅读。- obj:需要格式化的对象。
- 返回值:返回格式化后的 JSON 字符串。
 
作用: 常用于将后端数据(如对象、集合)转换为 JSON 格式,以供前端解析或输出日志时生成可读性高的 JSON 内容。
实际开发场景: 在 RESTful API 开发中,通常需要将业务数据转换为 JSON 字符串返回给前端。toJsonPrettyStr 方法适合用于生成调试日志或接口文档输出。
# 2. parseObj 和 parseArray 方法
 parseObj 方法用于将 JSON 字符串解析为 JSONObject,而 parseArray 则用于将 JSON 字符串解析为 JSONArray。
# 示例:解析 JSON 字符串为 JSONObject
 import cn.hutool.json.JSONUtil;
import cn.hutool.json.JSONObject;
public class JSONUtilExample {
    public static void main(String[] args) {
        String jsonStr = "{\"name\":\"John\", \"age\":30}";
        // 解析 JSON 字符串为 JSONObject
        JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
        // 获取字段值
        String name = jsonObject.getStr("name");
        int age = jsonObject.getInt("age");
        System.out.println("姓名: " + name); // 输出: 姓名: John
        System.out.println("年龄: " + age); // 输出: 年龄: 30
    }
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- parseObj(String jsonStr):将 JSON 字符串解析为- JSONObject。- jsonStr:待解析的 JSON 字符串。
- 返回值:返回解析后的 JSONObject对象。
 
- parseArray(String jsonStr):将 JSON 字符串解析为- JSONArray。- jsonStr:待解析的 JSON 字符串。
- 返回值:返回解析后的 JSONArray对象。
 
作用: 在处理来自外部的数据时(如前端传递的 JSON 数据),通常需要先将其解析为 JSONObject 或 JSONArray 进行进一步操作。
实际开发场景: 在表单提交、API 调用中,常用这些方法解析 JSON 字符串,从而提取所需的数据。
# 3. parseFromXml 和 toXmlStr 方法
 parseFromXml 方法用于将 XML 字符串转换为 JSON,而 toXmlStr 则将 JSON 对象转换为 XML 格式。
# 示例:XML 与 JSON 的相互转换
import cn.hutool.json.JSONUtil;
import cn.hutool.json.JSONObject;
public class JSONUtilExample {
    public static void main(String[] args) {
        String xmlStr = "<person><name>John</name><age>30</age></person>";
        // 将 XML 字符串解析为 JSON 对象
        JSONObject jsonObject = JSONUtil.parseFromXml(xmlStr);
        System.out.println("转换后的 JSON 对象: " + jsonObject);
        // 输出: {"name":"John","age":30}
        // 将 JSON 对象转换为 XML 字符串
        String xml = JSONUtil.toXmlStr(jsonObject);
        System.out.println("转换回的 XML 字符串: " + xml);
        // 输出: <name>John</name><age>30</age>
    }
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- parseFromXml(String xmlStr):将 XML 字符串解析为- JSONObject。- xmlStr:待解析的 XML 字符串。
- 返回值:返回解析后的 JSONObject对象。
 
- toXmlStr(JSONObject jsonObject):将- JSONObject转换为 XML 字符串。- jsonObject:待转换的 JSON 对象。
- 返回值:返回生成的 XML 字符串。
 
作用: 在与遗留系统或第三方系统对接时,可能需要在 XML 与 JSON 之间进行格式转换。
实际开发场景: 在数据迁移、系统集成时,经常需要将旧系统的 XML 格式数据转换为现代化的 JSON 格式,或反之。
# 4. toBean 和 toBeanList 方法
 toBean 方法用于将 JSON 字符串转换为 JavaBean 对象,toBeanList 则用于将 JSON 数组转换为 JavaBean 列表。
# 示例:JSON 转 JavaBean
import cn.hutool.json.JSONUtil;
import cn.hutool.json.JSONObject;
import lombok.Data;
import java.util.List;
public class JSONUtilExample {
    public static void main(String[] args) {
        String jsonStr = "{\"name\":\"John\", \"age\":30}";
        // 将 JSON 字符串转换为 JavaBean
        Person person = JSONUtil.toBean(jsonStr, Person.class);
        System.out.println("姓名: " + person.getName()); // 输出: 姓名: John
        System.out.println("年龄: " + person.getAge()); // 输出: 年龄: 30
    }
}
@Data
class Person {
    private String name;
    private int age;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- toBean(String jsonStr, Class<T> beanClass):将 JSON 字符串转换为 JavaBean 对象。- jsonStr:待转换的 JSON 字符串。
- beanClass:目标 JavaBean 的类型。
- 返回值:返回转换后的 JavaBean 对象。
 
- toBeanList(String jsonStr, Class<T> beanClass):将 JSON 数组字符串转换为 JavaBean 列表。- jsonStr:待转换的 JSON 数组字符串。
- beanClass:目标 JavaBean 的类型。
- 返回值:返回转换后的 JavaBean 列表。
 
作用: 在开发中经常需要将 JSON 数据映射为 Java 对象,便于业务逻辑处理。
实际开发场景: 在 RESTful API 中接收 JSON 格式的数据时,通常会将其转换为 JavaBean 进行处理。
# 5. readJSONObject 和 readJSONArray 方法
 readJSONObject 和 readJSONArray 方法用于从文件中读取 JSON 数据,支持指定字符集。
# 示例:从文件读取 JSON 数据
import cn.hutool.json.JSONUtil;
import cn.hutool.json.JSONObject;
import java.io.File;
import java.nio.charset.StandardCharsets;
public class JSONUtilExample {
    public static void main(String[] args) {
        // 指定 JSON 文件路径
        File file = new File("data.json");
        // 从文件读取 JSON 对象
        JSONObject jsonObject = JSONUtil.readJSONObject(file, StandardCharsets.UTF_8);
        System.out.println("从文件读取的 JSON 对象: " + jsonObject);
    }
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- readJSONObject(File file, Charset charset):从文件中读取 JSON
对象。
- file:JSON 文件。
- charset:读取文件时使用的字符集。
- 返回值:返回读取的 - JSONObject对象。
- readJSONArray(File file, Charset charset):从文件中读取 JSON 数组。- file:JSON 文件。
- charset:读取文件时使用的字符集。
- 返回值:返回读取的 JSONArray对象。
 
作用: 在需要从配置文件或数据文件中读取 JSON 内容时非常有用。
实际开发场景: 在读取项目中的配置文件或静态数据时,可以使用这些方法从文件中加载 JSON 内容。
# 6. 其它常用方法
- quote(String str):对字符串中的双引号进行转义处理,避免解析错误。
- wrap(Object obj):将任意对象包装为 JSON 对象。
- formatJsonStr(String jsonStr):格式化 JSON 字符串,提升可读性。
