一、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
以上就是一個支持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