一、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/n/237588.html