從map到jsonobject——詳解map轉jsonobject的各種方式

一、map轉jsonobject對象

map轉jsonobject對象是最基本的一種轉換方式,直接將map轉換為jsonobject對象。

import com.alibaba.fastjson.JSONObject;

Map map = new HashMap();
map.put("name", "Tom");
map.put("age", 20);

JSONObject jsonObject = new JSONObject(map);
System.out.println(jsonObject.toJSONString());

以上代碼輸出結果為:

{"name":"Tom","age":20}

這種方式的優點是簡單、直接,適用於普通的map轉換。但是,如果map中存在嵌套的map或者list,則無法轉換嵌套數據。

二、map轉jsonobject對象 fastjson

fastjson是阿里巴巴開源的json處理庫,常用於將java對象轉換為json格式的數據。對於map轉換為jsonobject對象,fastjson同樣提供了api供我們使用。

import com.alibaba.fastjson.JSONObject;

Map map = new HashMap();
map.put("name", "Tom");
map.put("age", 20);

JSONObject jsonObject = (JSONObject) JSONObject.toJSON(map);
System.out.println(jsonObject.toJSONString());

輸出結果與前一種方式相同。

fastjson同樣不能轉換嵌套的map或者list,但相較於第一種方式優化了一些性能問題。

三、map轉jsonobject字元串

有時我們需要將map轉換為json格式的字元串,這種方式能夠滿足我們的需求。

import com.alibaba.fastjson.JSONObject;

Map map = new HashMap();
map.put("name", "Tom");
map.put("age", 20);

String jsonString = JSONObject.toJSONString(map);
System.out.println(jsonString);

輸出結果與前兩種方式相同。

這種方式的優點在於使用方便,直接返回字元串,方便做到介面的返回值等。

四、map轉jsonobject對象空值不見了

如果我們的map中存在null值,將轉換為jsonobject對象後null值將不會存在,這與json數據格式的規定是相符的,但是在某些場景下會帶來問題。

import com.alibaba.fastjson.JSONObject;

Map map = new HashMap();
map.put("name", "Tom");
map.put("age", null);

JSONObject jsonObject = new JSONObject(map);
System.out.println(jsonObject.toJSONString());

輸出結果為:

{"name":"Tom"}

我們可以發現,age被忽略掉了,如果需要保留null值,我們可以在json配置中設置參數保留null值。

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

Map map = new HashMap();
map.put("name", "Tom");
map.put("age", null);

String jsonString = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
System.out.println(jsonString);

輸出結果為:

{"name":"Tom","age":null}

五、map轉json

除了轉換為jsonobject對象,map同樣可以轉換為json格式的字元串。

import com.alibaba.fastjson.JSON;

Map map = new HashMap();
map.put("name", "Tom");
map.put("age", 20);

String jsonString = JSON.toJSONString(map);
System.out.println(jsonString);

輸出結果同map轉jsonobject字元串。

六、fastjson map轉json

在fastjson庫中,同樣有一個api將map直接轉換為json格式的字元串。

import com.alibaba.fastjson.JSON;

Map map = new HashMap();
map.put("name", "Tom");
map.put("age", 20);

String jsonString = JSON.toJSONString(map);
System.out.println(jsonString);

輸出結果同map轉jsonobject字元串。

七、map轉json字元串

另一種將map轉換為json格式字元串的方式,適用於簡單的map轉換。

import org.json.JSONObject;

Map map = new HashMap();
map.put("name", "Tom");
map.put("age", 20);

JSONObject jsonObject = new JSONObject(map);
String jsonString = jsonObject.toString();
System.out.println(jsonString);

輸出結果與前面幾種方式相同。

八、jsonobject轉換為map

除了將map轉換為json格式,我們同樣可以將json格式的數據轉換為map對象。

import com.alibaba.fastjson.JSONObject;

String jsonString = "{\"name\":\"Tom\",\"age\":20}";
JSONObject jsonObject = JSONObject.parseObject(jsonString);
Map map = (Map)JSONObject.toJavaObject(jsonObject, Map.class);
System.out.println(map);

輸出結果為:

{name=Tom, age=20}

我們可以發現,json數據轉化為map數據非常便捷,這在對介面進行參數傳遞時,可以針對性進行封裝,傳遞map對象使得介面顯得更加簡潔明了。

九、如何將map轉化為json

總結起來,我們可以通過以上方式將map轉化為json數據。但是進一步思考,假如我們的map中存在嵌套的map或list,我們該怎麼辦呢?這個時候我們可以採用遞歸的方式進行解決。

我們定義一個轉換方法,該方法接受Map作為參數,並遞歸進行map轉換操作,對於map中的每個元素,如果是基本類型則直接轉為jsonobject或字元串的鍵值對,如果為map或list,則遞歸繼續執行轉換方法。

import com.alibaba.fastjson.JSONObject;

public static JSONObject mapToJson(Map map) {
    JSONObject json = new JSONObject();
    if (map != null){
        for (Map.Entry entry : map.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            if (value instanceof Map) {
                json.put(key, mapToJson((Map) value));
            } else if (value instanceof List) {
                json.put(key, listToJson((List)value));
            } else {
                json.put(key, value.toString());
            }
        }
    }
    return json;
}

public static JSONArray listToJson(List list) {
    JSONArray json = new JSONArray();
    if (list != null){
        for (Object object : list) {
            if (object instanceof Map) {
                json.add(mapToJson((Map) object));
            } else if (object instanceof List) {
                json.add(listToJson((List) object));
            } else {
                json.add(object.toString());
            }
        }
    }
    return json;
}

以上就是一個支持map嵌套轉換的方法。對於該方法,我們同樣可以使用fastjson庫進行優化。

import com.alibaba.fastjson.JSON;

public static JSONObject mapToJson(Map map) {
    String jsonString = JSON.toJSONString(map);
    JSONObject jsonObject = JSON.parseObject(jsonString);
    return jsonObject;
}

以上代碼更加簡單,並且使用fastjson庫優化了性能問題。但是這種方式最大的不足在於只能適用普通對象,對於較為複雜的對象則無法進行處理。

小結

本文詳細介紹了map轉jsonobject的多種方式,包括基本的map轉jsonobject對象、map轉jsonobject對象fastjson,map轉jsonobject字元串、map轉jsonobject對象空值不見了、map轉json、fastjson map轉json、map轉json字元串、jsonobject轉換為map、如何將map轉化為json等方式。同時,本文還針對map嵌套的情況,設計了一種支持map嵌套轉換的方法,通過該方法能夠提高代碼的可復用性。

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

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

相關推薦

  • Python緩存圖片的處理方式

    本文將從多個方面詳細闡述Python緩存圖片的處理方式,包括緩存原理、緩存框架、緩存策略、緩存更新和緩存清除等方面。 一、緩存原理 緩存是一種提高應用程序性能的技術,在網路應用中流…

    編程 2025-04-29
  • Python在線編輯器的優勢與實現方式

    Python在線編輯器是Python語言愛好者的重要工具之一,它可以讓用戶方便快捷的在線編碼、調試和分享代碼,無需在本地安裝Python環境。本文將從多個方面對Python在線編輯…

    編程 2025-04-28
  • Java表單提交方式

    Java表單提交有兩種方式,分別是get和post。下面我們將從以下幾個方面詳細闡述這兩種方式。 一、get方式 1、什麼是get方式 在get方式下,表單的數據會以查詢字元串的形…

    編程 2025-04-27
  • 用Pythonic的方式編寫高效代碼

    Pythonic是一種編程哲學,它強調Python編程風格的簡單、清晰、優雅和明確。Python應該描述為一種語言而不是一種編程語言。Pythonic的編程方式不僅可以使我們在編碼…

    編程 2025-04-27
  • Java多版本支持實現方式

    本文將從以下幾個方面闡述如何實現Java多版本支持,並給出可行的代碼示例。 一、多版本Java環境概述 Java是一門跨平台的編程語言,但是在不同的應用場景下,可能需要使用不同版本…

    編程 2025-04-27
  • SpringBoot Get方式請求傳參用法介紹

    本文將從以下多個方面對SpringBoot Get方式請求傳參做詳細的闡述,包括URL傳參、路徑傳參、請求頭傳參、請求體傳參等,幫助讀者更加深入地了解Get請求方式下傳參的相關知識…

    編程 2025-04-27
  • Python獲取APP數據的多種方式

    如果您需要對APP進行分析、數據採集、監控或者自動化測試,那麼您一定需要獲取APP的數據。本文將會介紹一些Python獲取APP數據的方式。 一、使用ADB工具獲取APP數據 AD…

    編程 2025-04-27
  • Java JSONObject 多層應用技巧用法介紹

    本文將介紹如何在 Java 中使用 JSONObject 來解析和操作多層 JSON 數據,包括嵌套、遍歷、增刪改查等操作。 一、JSONObject 初始化和解析 JSON 數據…

    編程 2025-04-27
  • Python中用空格隔開的使用方式

    Python是一種高級編程語言,非常流行,因為它有很多有用的功能。其中一個有用的功能是用空格隔開代碼。在本文中,我們將從多個方面討論Python中如何使用空格隔開代碼。 一、Pyt…

    編程 2025-04-27
  • HTTP請求方式的選擇:POST還是GET?

    對於使用xxl-job進行任務調度的開發者,通常需要發送HTTP請求來執行一些任務。但是在發送請求時,我們總是會遇到一個問題:是使用POST還是GET?下面將從多個方面對這個問題進…

    編程 2025-04-27

發表回復

登錄後才能評論