一、常规用法
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": "这个工具还有哪些好玩的?"
}
]
}
这里有几个需要注意的点:
- Json数据中有嵌套的Map、Object、List等类型
- 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
微信扫一扫
支付宝扫一扫