hutool工具-----JSON工具-JSONUtil

JSONUtil

介绍

JSONUtil是针对JSONObject和JSONArray的静态快捷方法集合,在之前的章节我们已经介绍了一些工具方法,在本章节我们将做一些补充。

使用

1、JSON字符串创建

JSONUtil.toJsonStr可以将任意对象(Bean、Map、集合等)直接转换为JSON字符串。 如果对象是有序的Map等对象,则转换后的JSON字符串也是有序的。

    /**
     * 转换为JSON字符串
     * <p>
     * 被转为JSON的对象
     *
     * @return JSON字符串
     */
    @Test
    void toJsonStrTest() {
        //map
        SortedMap<Object, Object> sortedMap = new TreeMap<Object, Object>() {
            private static final long serialVersionUID = 1L;
            {
                put("attributes", "a");
                put("b", "b");
                put("c", "c");
            }
        };
        //对象
        Student beanString = new Student(1, 1, 1, "张三");

        //集合
        List<Student> list = new ArrayList<>();
        list.add(new Student(1, 1, 1, "张三"));
        list.add(new Student(1, 1, 2, "李四"));
        list.add(new Student(1, 1, 3, "王五"));

        System.out.println("JSONUtil.toJsonStr(beanString) = " + JSONUtil.toJsonStr(beanString));
        System.out.println("JSONUtil.toJsonStr(sortedMap) = " + JSONUtil.toJsonStr(sortedMap));
        System.out.println("JSONUtil.toJsonStr(list) = " + JSONUtil.toJsonStr(list));
    }

结果

JSONUtil.toJsonStr(beanString) = {"gradeId":0,"studentId":1,"termId":1,"classId":1,"name":"张三"}
JSONUtil.toJsonStr(sortedMap) = {"attributes":"a","b":"b","c":"c"}
JSONUtil.toJsonStr(list) = [{"gradeId":0,"studentId":1,"termId":1,"classId":1,"name":"张三"},
{"gradeId":0,"studentId":2,"termId":1,"classId":1,"name":"李四"},
{"gradeId":0,"studentId":3,"termId":1,"classId":1,"name":"王五"}]

如果我们想获得格式化后的JSON,则:

JSONUtil.toJsonPrettyStr(object);

System.out.println("JSONUtil.toJsonPrettyStr(sortedMap) = "
 + JSONUtil.toJsonPrettyStr(sortedMap));

结果

JSONUtil.toJsonPrettyStr(sortedMap) = {
    "attributes": "a",
    "b": "b",
    "c": "c"
}

2、JSON字符串解析

    /**
     * JSON字符串转JSONObject对象
     * <p>
     * JSON字符串
     *
     * @return JSONObject
     */
    @Test
    void Test() {
        String html = "{\"name\":\"Something must have been changed since you leave\"}";
        JSONObject jsonObject = JSONUtil.parseObj(html);
        System.out.println("jsonObject.getStr(\"name\") = " + jsonObject.getStr("name"));
    }

结果

jsonObject.getStr("name") = Something must have been changed since you leave

3、XML字符串转换为JSON

    /**
     * XML字符串转为JSONObject
     *
     *  XML字符串
     * @return JSONObject
     */
    @Test
    void parseFromXmlTest() {
        String s = "<sfzh>123</sfzh><sfz>456</sfz><name>aa</name><gender>1</gender>";
        JSONObject json = JSONUtil.parseFromXml(s);
        System.out.println("json.get(\"sfzh\") = " + json.get("sfzh"));
        System.out.println("json.get(\"name\") = " + json.get("name"));

    }

结果

json.get("sfzh") = 123
json.get("name") = aa

4、JSON转换为XML

    /**
     * 转换为XML字符串
     *
     * @param json JSON
     * @return XML字符串
     */
    @Test
    void toXmlStrTest() {
        final JSONObject put = JSONUtil.createObj()
                .set("aaa", "你好")
                .set("键2", "test");

// <aaa>你好</aaa><键2>test</键2>
        final String s = JSONUtil.toXmlStr(put);
        System.out.println("s = " + s);

    }

结果

s = <aaa>你好</aaa><2>test</2>

5、 JSON转Bean

我们先定义两个较为复杂的Bean(包含泛型)

    @Data
    public class ADT {
        private List<String> BookingCode;
    }

    @Data
    public class Price {
        private List<List<ADT>> ADT;
    }

    /**
     * JSON字符串转为实体类对象,转换异常将被抛出
     *
     * @param <T>        Bean类型
     * @param jsonString JSON字符串
     * @param beanClass  实体类对象
     * @return 实体类对象
     * @since 3.1.2
     */
    @Test
    void toBeanTest() {
        String json = "{\"ADT\":[[{\"BookingCode\":[\"N\",\"N\"]}]]}";
        Price price = JSONUtil.toBean(json, Price.class);
        System.out.println("price = " + price);
    }

<think>嗯,用户问的是Hutool-All,我需要先确认自己对这个工具的了解是否正确。Hutool是一个Java工具库,对吧?我记得它的目标是简化Java开发中的常见操作,比如日期处理、加密解密、文件操作等等。用户可能想了解它的主要功能、优势以及如何使用。 首先,得确认Hutool-All是否指的是整个Hutool库的打包版本,可能是一个聚合依赖,包含了所有模块。Hutool的文档里应该提到,用户使用时可以通过Maven引入hutool-all来获取全部功能,但有时候可能只需要部分模块,这时候单独引入更合适。 接下来,用户可能需要知道Hutool的核心模块有哪些,比如convert类型转换,setting配置文件,log日志,http客户端等等。需要分点说明,结构清晰。另外,举几个使用示例会更好,比如生成UUID、处理JSON、HTTP请求等,这样用户能直观看到代码怎么写。 还要注意用户可能关心的问题,比如为什么选择Hutool而不是其他库,它的优势在哪里。比如设计合理、模块化、文档齐全这些点需要强调。另外,可能需要注意Hutool的版本兼容性,比如支持Java 8及以上,避免用户在使用时遇到版本问题。 有没有可能用户混淆了Hutool-All和其他子模块?比如hutool-core是核心功能,而hutool-all是全部模块的集合。需要明确说明这一点,避免用户引入不必要的依赖。 另外,安全方面的问题,比如Hutool提供的加密工具是否可靠,SSL支持如何,这也是开发者关心的点。需要提到支持的加密算法,比如AES、DES、RSA等,以及SSL的版本。 可能还需要提到Hutool的社区活跃度,是否有持续维护,遇到问题如何寻求帮助,比如GitHub仓库、文档链接等。这可以增加用户的信任感。 检查是否有错误,比如Hutool的版本现在是否还是5.x,或者是否有更新。确保提供的Maven依赖是最新的,避免用户使用过时版本。另外,代码示例中的类和方法是否正确,比如HttpUtil是否属于cn.hutool.http包。 最后,总结部分要简明扼要,强调Hutool如何提升开发效率,适合哪些场景,让用户有个整体的认识。</think>以下是对Hutool-All的详细介绍,采用分步说明结构: # Hutool-All 介绍 Hutool-All是Java工具Hutool的完整打包版本,包含所有子模块。Hutool旨在简化Java开发中的常见操作,其设计遵循「小而全」的理念。 ## 一、核心特点 1. **模块化设计** - 提供20+独立子模块(如hutool-core, hutool-http) - 可通过`hutool-all`一次性引入所有模块 2. **功能覆盖** $$ \text{功能数} \geq 200 \text{(涵盖工具方法、封装类)} $$ 包含:类型转换、日期处理、加密、IO、网络、缓存等 3. **依赖管理** - 最小依赖(仅需Java 8+) - 可选集成第三方库(如Spring、Quartz) ## 二、主要模块说明 | 模块名称 | 功能描述 | |----------------|--------------------------| | hutool-core | 基础工具(日期、字符串处理)| | hutool-http | HTTP客户端工具 | | hutool-crypto | 加密解密工具(AES/DES/RSA)| | hutool-extra | 扩展功能(邮件/二维码生成)| ## 三、使用示例 ### 1. 基础使用 ```java // 生成UUID String uuid = IdUtil.randomUUID(); // JSON处理 User user = JSONUtil.toBean("{\"name\":\"张三\"}", User.class); ``` ### 2. HTTP请求 ```java String response = HttpUtil.get("https://api.example.com"); ``` ### 3. 加密解密 ```java // AES加密 String encrypted = SecureUtil.aes().encryptHex("明文"); ``` ## 四、Maven依赖 ```xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.20</version> </dependency> ``` ## 五、优势对比 1. **VS Apache Commons** - 更符合中文开发者习惯 - 集成度更高(如包含HTTP客户端) 2. **VS Guava** - API设计更简洁 - 学习曲线更低 ## 六、适用场景 1. 快速开发原型项目 2. 简化传统CRUD开发 3. 需要轻量级工具集的微服务 ## 七、注意事项 1. 生产环境建议按需引入子模块 2. 与Spring Boot集成时注意版本兼容 3. 加密模块需要遵循相关安全规范 > 官网地址:https://hutool.cn > GitHub仓库:https://github.com/dromara/hutool 总结:Hutool-All通过高度封装的API,可将常见Java开发效率提升约40%,特别适合需要快速实现基础功能的中小型项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值