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

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/237588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:05
下一篇 2024-12-12 12:05

相关推荐

  • Python缓存图片的处理方式

    本文将从多个方面详细阐述Python缓存图片的处理方式,包括缓存原理、缓存框架、缓存策略、缓存更新和缓存清除等方面。 一、缓存原理 缓存是一种提高应用程序性能的技术,在网络应用中流…

    编程 2025-04-29
  • Python在线编辑器的优势与实现方式

    Python在线编辑器是Python语言爱好者的重要工具之一,它可以让用户方便快捷的在线编码、调试和分享代码,无需在本地安装Python环境。本文将从多个方面对Python在线编辑…

    编程 2025-04-28
  • Java表单提交方式

    Java表单提交有两种方式,分别是get和post。下面我们将从以下几个方面详细阐述这两种方式。 一、get方式 1、什么是get方式 在get方式下,表单的数据会以查询字符串的形…

    编程 2025-04-27
  • 用Pythonic的方式编写高效代码

    Pythonic是一种编程哲学,它强调Python编程风格的简单、清晰、优雅和明确。Python应该描述为一种语言而不是一种编程语言。Pythonic的编程方式不仅可以使我们在编码…

    编程 2025-04-27
  • Java多版本支持实现方式

    本文将从以下几个方面阐述如何实现Java多版本支持,并给出可行的代码示例。 一、多版本Java环境概述 Java是一门跨平台的编程语言,但是在不同的应用场景下,可能需要使用不同版本…

    编程 2025-04-27
  • SpringBoot Get方式请求传参用法介绍

    本文将从以下多个方面对SpringBoot Get方式请求传参做详细的阐述,包括URL传参、路径传参、请求头传参、请求体传参等,帮助读者更加深入地了解Get请求方式下传参的相关知识…

    编程 2025-04-27
  • Python获取APP数据的多种方式

    如果您需要对APP进行分析、数据采集、监控或者自动化测试,那么您一定需要获取APP的数据。本文将会介绍一些Python获取APP数据的方式。 一、使用ADB工具获取APP数据 AD…

    编程 2025-04-27
  • Java JSONObject 多层应用技巧用法介绍

    本文将介绍如何在 Java 中使用 JSONObject 来解析和操作多层 JSON 数据,包括嵌套、遍历、增删改查等操作。 一、JSONObject 初始化和解析 JSON 数据…

    编程 2025-04-27
  • Python中用空格隔开的使用方式

    Python是一种高级编程语言,非常流行,因为它有很多有用的功能。其中一个有用的功能是用空格隔开代码。在本文中,我们将从多个方面讨论Python中如何使用空格隔开代码。 一、Pyt…

    编程 2025-04-27
  • HTTP请求方式的选择:POST还是GET?

    对于使用xxl-job进行任务调度的开发者,通常需要发送HTTP请求来执行一些任务。但是在发送请求时,我们总是会遇到一个问题:是使用POST还是GET?下面将从多个方面对这个问题进…

    编程 2025-04-27

发表回复

登录后才能评论