您的位置:

从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嵌套转换的方法,通过该方法能够提高代码的可复用性。

文章目录
顶部