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/zh-hk/n/148573.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RJTC的頭像RJTC
上一篇 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

發表回復

登錄後才能評論