一、常規用法
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/zh-tw/n/148573.html
微信掃一掃
支付寶掃一掃