一、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-hant/n/237588.html
微信掃一掃
支付寶掃一掃