JSON轉Map的詳細闡述

一、JSON轉Map方法

在Java中,將JSON轉換為Map可以使用Jackson等庫提供的API,在使用前需要添加JAR包並導入相應的類。下面是一個JSON轉Map的方法:

/**
 * JSON字元串轉Map
 *
 * @param jsonStr JSON字元串
 * @return Map
 */
public static Map jsonToMap(String jsonStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        return objectMapper.readValue(jsonStr, new TypeReference<Map>() {
        });
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

使用ObjectMapper的readValue()方法將JSON字元串轉換成Map對象,其中new TypeReference<Map<String, Object>>(){}指定返回的Map的鍵值類型為String和Object。

二、JSON數組轉Map

如果JSON字元串是一個數組,那麼在轉換成Map時需要先將數組轉換成List,然後再將List轉換成Map。

/**
 * JSON數組轉Map
 *
 * @param jsonArrayStr JSON數組字元串
 * @return Map
 */
public static Map jsonArrayToMap(String jsonArrayStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        List<Map> list = objectMapper.readValue(jsonArrayStr, new TypeReference<List<Map>>() {
        });
        if (!list.isEmpty()) {
            return list.get(0);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

使用ObjectMapper的readValue()方法將JSON字元串轉換成List<Map<String, Object>>對象,然後取List中的第一個元素作為Map對象返回。

三、JSON轉Map對象

如果JSON字元串中只包含一個對象,那麼可以直接將JSON轉換成Java對象,再將Java對象轉換成Map。

/**
 * JSON轉Map對象
 *
 * @param jsonStr JSON字元串
 * @return Map
 */
public static Map jsonToMapObject(String jsonStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        Object obj = objectMapper.readValue(jsonStr, Object.class);
        return jsonToMap(objectMapper.writeValueAsString(obj));
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

使用ObjectMapper的readValue()方法將JSON字元串轉換成Java對象,然後使用ObjectMapper的writeValueAsString()方法將Java對象轉換成JSON字元串,最後再使用jsonToMap()方法將JSON轉換成Map對象。

四、JSON轉Map方法實現

除了使用Jackson等庫提供的API將JSON轉換成Map對象外,還可以自己實現JSON轉Map方法。

/**
 * JSON轉Map方法實現
 *
 * @param jsonStr JSON字元串
 * @return Map
 */
public static Map jsonToMapByHand(String jsonStr) {
    Map map = new HashMap();
    if (jsonStr != null && !jsonStr.equals("")) {
        // 去掉首尾的{}
        jsonStr = jsonStr.substring(1, jsonStr.length() - 1);
        // 分離鍵值對
        String[] pairs = jsonStr.split(",");
        for (String pair : pairs) {
            String[] keyValue = pair.split(":");
            if (keyValue.length == 2) {
                String key = keyValue[0].trim();
                String value = keyValue[1].trim();
                if (value.startsWith("{")) {
                    // 處理值為對象,遞歸處理
                    map.put(key, jsonToMapByHand(value));
                } else {
                    // 處理值為字元串、數字、布爾類型、null
                    if (value.startsWith("\"") && value.endsWith("\"")) {
                        value = value.substring(1, value.length() - 1);
                    }
                    if (value.equals("null")) {
                        value = null;
                    } else if (value.equals("true")) {
                        value = "1";
                    } else if (value.equals("false")) {
                        value = "0";
                    }
                    map.put(key, value);
                }
            }
        }
    }
    return map;
}

首先去掉JSON字元串的首尾大括弧,然後分離出鍵值對,對值進行處理。對於值為對象的鍵值對,使用遞歸處理。

五、JSON轉Map方式

除了將JSON轉換成Map對象外,也可以將JSON轉換成其他Java集合對象,如List和Set等。

/**
 * JSON轉List
 *
 * @param jsonStr JSON字元串
 * @return List<Map>
 */
public static List<Map> jsonToList(String jsonStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        return objectMapper.readValue(jsonStr, new TypeReference<List<Map>>() {
        });
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

/**
 * JSON轉Set
 *
 * @param jsonStr JSON字元串
 * @return Set<Map>
 */
public static Set<Map> jsonToSet(String jsonStr) {
    List<Map> list = jsonToList(jsonStr);
    if (list != null) {
        return new HashSet(list);
    }
    return null;
}

使用ObjectMapper的readValue()方法將JSON字元串轉換成List<Map<String, Object>>對象,或者先將JSON字元串轉換成List<Java對象>,再轉換成List<Map<String, Object>>對象。從List轉換成Set可以使用HashSet的構造函數。

六、JSON轉Map的6種方法

經過上述的講解,可以總結出JSON轉Map的6種方法:

  1. 使用Jackson等庫提供的API將JSON轉換成Map對象
  2. 將JSON數組轉換成List,再將List轉換成Map對象
  3. 將JSON轉換成Java對象,再將Java對象轉換成Map對象
  4. 使用自己實現的JSON轉Map方法
  5. 將JSON轉換成其他Java集合對象,如List和Set等
  6. 將JSON轉換成字元串,再使用Java的正則表達式等方法解析字元串成Map對象

七、JSON轉Map最快的方法

對於性能要求高的場景,使用快速JSON庫可以實現更快的JSON轉Map。

/**
 * 快速JSON轉Map
 *
 * @param jsonStr JSON字元串
 * @return Map
 */
public static Map jsonToMapFast(String jsonStr) {
    return JSON.parseObject(jsonStr, new TypeReference<Map>() {
    });
}

使用FastJson的parseObject()方法將JSON字元串轉換成Map對象,其中new TypeReference<Map<String, Object>>(){}指定返回的Map的鍵值類型為String和Object。

八、JSON轉Map保留null

默認情況下,JSON轉換成Java對象時,會將值為null的屬性忽略掉。如果需要保留值為null的屬性,可以使用Jackson等庫提供的配置。

/**
 * JSON轉Map保留null
 *
 * @param jsonStr JSON字元串
 * @return Map
 */
public static Map jsonToMapWithNull(String jsonStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
    try {
        return objectMapper.readValue(jsonStr, new TypeReference<Map>() {
        });
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

使用ObjectMapper的setSerializationInclusion()方法將null值序列化到JSON字元串中。

九、JSON轉Map指定泛型

如果需要將JSON轉換成Map<String, List<Java對象>>等泛型類型,可以使用Jackson等庫提供的API指定泛型。

/**
 * JSON轉Map指定泛型
 *
 * @param jsonStr       JSON字元串
 * @param genericType   泛型類型
 * @param elementClazz  泛型元素類型
 * @param            泛型類型
 * @return Map
 */
public static  Map jsonToMapWithType(String jsonStr, Class genericType, Class elementClazz) {
    ObjectMapper objectMapper = new ObjectMapper();
    JavaType type = objectMapper.getTypeFactory().constructMapType(genericType, String.class, elementClazz);
    try {
        return objectMapper.readValue(jsonStr, type);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

使用ObjectMapper的getTypeFactory()方法構造Map<String, List<Java對象>>等泛型類型。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/256825.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:42
下一篇 2024-12-15 12:42

相關推薦

  • 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數據並解析相關內容。通過使用Python的第三方庫,我們可以輕鬆地處理JSON數據,包括讀取、提取和操作JSON數據。 一、獲取JSON數…

    編程 2025-04-27
  • Python存為JSON的方法及實例

    本文將從以下多個方面對Python存為JSON做詳細的闡述。 一、JSON簡介 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易於人閱…

    編程 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
  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25

發表回復

登錄後才能評論