一、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
微信扫一扫
支付宝扫一扫