一、map转jsonobject对象
map转jsonobject对象是最基本的一种转换方式,直接将map转换为jsonobject对象。
import com.alibaba.fastjson.JSONObject; Mapmap = 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; Mapmap = 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; Mapmap = 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; Mapmap = 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; Mapmap = 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; Mapmap = 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; Mapmap = 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; Mapmap = 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); Mapmap = (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(Mapmap) { 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