Hutool Json转Map详细解析

一、常规用法

Hutool是一套关于Java开发的工具集,提供了许多常用的工具类。其中,JsonUtil就是用来处理Json数据的工具类。在Hutool中,将Json数据转为Map类型是一个常规操作,便于数据的处理和使用。

// 引入依赖
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.4.3</version>
</dependency>

// json数据字符串
String jsonStr = "{\"name\":\"小明\",\"age\":18,\"sex\":\"男\"}";

// 将json转为Map
Map<String, Object> map = JsonUtil.parseObj(jsonStr);

上述代码将Json数据字符串转为Map数据类型,其中Key为Json字符串中的Key,Value为Json数据对应的值。在将Json转为Map的过程中,Hutool将Json字符串中的空格、换行和制表符都去掉,只保留内容。

二、Json转Map的方法

1. parseObj()

JsonUtil的parseObj()方法是将Json字符串转换为Map的最常用方法,其定义如下:

public static <T> Map<String, T> parseObj(String jsonStr)

其中,jsonStr为需要转换的Json字符串,方法会将Json字符串解析成Map<String, T>类型。其中,T泛指Json数据中的Value类型。

2. parseMap()

parseMap()方法仅需要传入Json字符串作为参数,即可将其转换为Map类型,其定义如下:

public static Map<String, Object> parseMap(String jsonStr)

其与parseObj()的区别在于返回值的类型,parseMap()返回的是Map<String, Object>类型。

3. parseFromXml()

parseFromXml()方法是Hutool用来将XML转换为Json的方法,但因为XML与Json对应的键值对格式相同,所以可以使用该方法将Json字符串转换为Map类型。其定义如下:

public static <T> Map<String, T> parseFromXml(String xmlStr)

其中,xmlStr为需要转换的XML字符串,方法会将XML字符串解析成Map<String, T>类型。其中,T泛指Value类型。

代码示例:

// 引入依赖
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.4.3</version>
</dependency>

// json数据字符串
String jsonStr = "{\"name\":\"小明\",\"age\":18,\"sex\":\"男\"}";

// 将json转为Map
Map<String, Object> map1 = JsonUtil.parseObj(jsonStr);
Map<String, Object> map2 = JsonUtil.parseMap(jsonStr);

System.out.println(map1);
System.out.println(map2);

输出结果如下:

{name=小明, sex=男, age=18}
{name=小明, sex=男, age=18}

三、Json转Map的高级用法

1. 指定Map的Value类型

在常规用法中,Map的Value类型会被自动解析。但在一些需要严格限定MapValue类型的应用场景下,可以通过如下方式指定Map的Value类型:

// 定义学生对象
public class Student {
    private String name;
    private Integer age;
    private String sex;

    // 构造器、getter、setter方法省略
}

// json数据字符串
String jsonStr = "{\"name\":\"小明\",\"age\":18,\"sex\":\"男\"}";

// 将json转为Map,将Map的Value设为Student类型
Map<String, Student> map = JsonUtil.parseObj(jsonStr, new TypeReference<Map<String, Student>>() {});

System.out.println(map);

输出结果如下:

{小明=Student(name=小明, age=18, sex=男)}

2. 解析Json数组为List

在一些实际应用中,Json数据不仅仅是一个Object,还可以是一个Array,那么如何将Json数组解析为List<T>类型呢?可以使用parseArray()方法或parseArray2List()方法,其定义如下:

// 将Json数组解析成List<T>
public static <T> List<T> parseArray(String jsonStr)

// 将Json数组解析成List<T>
public static <T> List<T> parseArray(String jsonStr, Class<T> elementType)

// 将Json数组解析成List<T>
public static <T> List<T> parseArray(String jsonStr, TypeReference<List<T>> typeReference)

// 将Json数组解析成List<T>
public static <T> List<T> parseArray2List(String jsonStr, Class<T> elementType)

其中,parseArray()方法将Json数组解析为List<T>类型,T泛指每一个Object的类型。第二个参数elementType为需要指定的泛型类型。

parseArray2List()方法则和parseArray()方法类似,但无需指明返回的泛型类型。

代码示例:

// 引入依赖
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.4.3</version>
</dependency>

// json数据字符串
String jsonStr = "[{\"name\":\"小明\",\"age\":18,\"sex\":\"男\"},{\"name\":\"小红\",\"age\":17,\"sex\":\"女\"}]";

// 将Json数组解析成List<T>
List<Map<String, Object>> list1 = JsonUtil.parseArray(jsonStr);
List<Map<String, Object>> list2 = JsonUtil.parseArray(jsonStr, new TypeReference<List<Map<String, Object>>>() {});
List<Map<String, Object>> list3 = JsonUtil.parseArray2List(jsonStr, Map.class);

System.out.println(list1);
System.out.println(list2);
System.out.println(list3);

输出结果如下:

[{name=小明, sex=男, age=18}, {name=小红, sex=女, age=17}]
[{name=小明, sex=男, age=18}, {name=小红, sex=女, age=17}]
[{name=小明, sex=男, age=18}, {name=小红, sex=女, age=17}]

3. 处理复杂Json数据

当Json数据比较复杂时,Hutool的JsonUtil同样能够胜任。例如下列Json数据:

{
    "id": "001",
    "name": "Hutool",
    "price": 99.9,
    "in_stock": true,
    "tags": ["Java", "工具"],
    "description": {
        "short": "Hutool是一个Java工具包",
        "details": "Hutool是一个工具包,主要用于优化Java开发,尤其是JDK的一些类库,让Java开发变得更加简单、快速、安全、可靠。"
    },
    "images": [
        {
            "url": "https://mydomain.com/images/hutool.png",
            "width": 640,
            "height": 480
        },
        {
            "url": "https://mydomain.com/images/hutool2.png",
            "width": 800,
            "height": 600
        }
    ],
    "comments": [
        {
            "user_id": "1001",
            "user_name": "小明",
            "comment": "Hutool真不错!"
        },
        {
            "user_id": "1002",
            "user_name": "小红",
            "comment": "这个工具还有哪些好玩的?"
        }
    ]
}

这里有几个需要注意的点:

  1. Json数据中有嵌套的Map、Object、List等类型
  2. Json数据中不同的Value类型不同

针对这种数据类型的Json数据,Hutool的JsonUtil同样可以处理。需要注意的是,在解析这种类型的Json数据时,需要预先定义好相应的Java对象,以保证对结果的准确解析。

代码示例:

// 引入依赖
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.4.3</version>
</dependency>

// 定义Comment对象
public class Comment {
    private String user_id;
    private String user_name;
    private String comment;

    // 构造器、getter、setter方法省略
}

// 定义Image对象
public class Image {
    private String url;
    private Integer width;
    private Integer height;

    // 构造器、getter、setter方法省略
}

// 定义Product对象
public class Product {
    private String id;
    private String name;
    private Double price;
    private Boolean in_stock;
    private List<String> tags;
    private Map<String, String> description;
    private List<Image> images;
    private List<Comment> comments;

    // 构造器、getter、setter方法省略
}

// json数据字符串
String jsonStr = "...(见上)";

// 将json转为Product对象
Product product = JsonUtil.parseObj(jsonStr, Product.class);

System.out.println(product);

输出结果如下:

Product{
    id='001',
    name='Hutool',
    price=99.9,
    in_stock=true,
    tags=[Java, 工具],
    description={short=Hutool是一个Java工具包, details=Hutool是一个工具包,主要用于优化Java开发,尤其是JDK的一些类库,让Java开发变得更加简单、快速、安全、可靠。}, 
    images=[Image{url='https://mydomain.com/images/hutool.png', width=640, height=480}, Image{url='https://mydomain.com/images/hutool2.png', width=800, height=600}], 
    comments=[Comment{user_id='1001', user_name='小明', comment='Hutool真不错!'}, Comment{user_id='1002', user_name='小红', comment='这个工具还有哪些好玩的?'}]}

四、小结

本文主要讲述了Hutool JsonUtil将Json数据转换为Map类型的用法。在文中,我们了解了parseObj()、parseMap()、parseFromXml()这三种Json转Map的常规方法,以及parseArray()和parseArray2List()这两种Json数组转换为List类型的方法。同时,本文还介绍了如何处理复杂Json数据类型。通过本文的学习,相信读者可以熟练掌握Hutool JsonUtil的用法,加快对Json数据的处理效率。

原创文章,作者:RJTC,如若转载,请注明出处:https://www.506064.com/n/148573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
RJTCRJTC
上一篇 2024-11-03 15:16
下一篇 2024-11-03 15:16

相关推荐

  • Hutool——supplier1的使用

    在Java编程中,我们常常使用各种各样的工具来帮助我们更快、更好地完成开发工作,而Hutool工具就是其中一种。作为一个Java工具类库,Hutool提供了非常丰富的工具类和方法,…

    编程 2025-04-29
  • JSON的MD5

    在Web开发过程中,JSON(JavaScript Object Notation)是最常用的数据格式之一。MD5(Message-Digest Algorithm 5)是一种常用…

    编程 2025-04-29
  • 使用Java将JSON写入HDFS

    本篇文章将从以下几个方面详细阐述Java将JSON写入HDFS的方法: 一、HDFS简介 首先,先来了解一下Hadoop分布式文件系统(HDFS)。HDFS是一个可扩展性高的分布式…

    编程 2025-04-29
  • 如何使用Newtonsoft datatable转Json

    Newtonsoft DataTable 是一个基于.NET的JSON框架,也是一个用于序列化和反序列化JSON的强大工具。 在本文中,我们将学习如何使用Newtonsoft Da…

    编程 2025-04-28
  • JPRC – 轻松创建可读性强的 JSON API

    本文将介绍一个全新的 JSON API 框架 JPRC,通过该框架,您可以轻松创建可读性强的 JSON API,提高您的项目开发效率和代码可维护性。接下来将从以下几个方面对 JPR…

    编程 2025-04-27
  • Python存为JSON的方法及实例

    本文将从以下多个方面对Python存为JSON做详细的阐述。 一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅…

    编程 2025-04-27
  • 使用Python获取JSON并解析

    本文将介绍如何使用Python获取JSON数据并解析相关内容。通过使用Python的第三方库,我们可以轻松地处理JSON数据,包括读取、提取和操作JSON数据。 一、获取JSON数…

    编程 2025-04-27
  • 使用Spread 8展示JSON数据

    使用Spread 8可以方便地展示JSON数据,本文将详细介绍如何利用Spread 8展示JSON数据。 一、Spread 8简介 Spread 8是一款强大的电子表格软件,可以方…

    编程 2025-04-27
  • 如何在json转实体类时忽略大小写

    本文将从以下几个方面介绍如何在json转实体类时忽略大小写。 一、使用Gson库实现json转实体类忽略大小写 Gson是Google提供的Java JSON操作库,它提供了简单易…

    编程 2025-04-27
  • C# 中 JSON null 不显示的处理方法

    本文将为大家介绍在 C# 中处理 JSON null 不显示的解决方法。 一、null 不显示的问题 在使用 C# 进行 JSON 数据处理的时候,经常会遇到 null 值不显示的…

    编程 2025-04-27

发表回复

登录后才能评论