一、常規用法
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-hant/n/148573.html