JSON转Map的详细阐述

一、JSON转Map方法

在Java中,将JSON转换为Map可以使用Jackson等库提供的API,在使用前需要添加JAR包并导入相应的类。下面是一个JSON转Map的方法:

/**
 * JSON字符串转Map
 *
 * @param jsonStr JSON字符串
 * @return Map
 */
public static Map jsonToMap(String jsonStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        return objectMapper.readValue(jsonStr, new TypeReference<Map>() {
        });
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

使用ObjectMapper的readValue()方法将JSON字符串转换成Map对象,其中new TypeReference<Map<String, Object>>(){}指定返回的Map的键值类型为String和Object。

二、JSON数组转Map

如果JSON字符串是一个数组,那么在转换成Map时需要先将数组转换成List,然后再将List转换成Map。

/**
 * JSON数组转Map
 *
 * @param jsonArrayStr JSON数组字符串
 * @return Map
 */
public static Map jsonArrayToMap(String jsonArrayStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        List<Map> list = objectMapper.readValue(jsonArrayStr, new TypeReference<List<Map>>() {
        });
        if (!list.isEmpty()) {
            return list.get(0);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

使用ObjectMapper的readValue()方法将JSON字符串转换成List<Map<String, Object>>对象,然后取List中的第一个元素作为Map对象返回。

三、JSON转Map对象

如果JSON字符串中只包含一个对象,那么可以直接将JSON转换成Java对象,再将Java对象转换成Map。

/**
 * JSON转Map对象
 *
 * @param jsonStr JSON字符串
 * @return Map
 */
public static Map jsonToMapObject(String jsonStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        Object obj = objectMapper.readValue(jsonStr, Object.class);
        return jsonToMap(objectMapper.writeValueAsString(obj));
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

使用ObjectMapper的readValue()方法将JSON字符串转换成Java对象,然后使用ObjectMapper的writeValueAsString()方法将Java对象转换成JSON字符串,最后再使用jsonToMap()方法将JSON转换成Map对象。

四、JSON转Map方法实现

除了使用Jackson等库提供的API将JSON转换成Map对象外,还可以自己实现JSON转Map方法。

/**
 * JSON转Map方法实现
 *
 * @param jsonStr JSON字符串
 * @return Map
 */
public static Map jsonToMapByHand(String jsonStr) {
    Map map = new HashMap();
    if (jsonStr != null && !jsonStr.equals("")) {
        // 去掉首尾的{}
        jsonStr = jsonStr.substring(1, jsonStr.length() - 1);
        // 分离键值对
        String[] pairs = jsonStr.split(",");
        for (String pair : pairs) {
            String[] keyValue = pair.split(":");
            if (keyValue.length == 2) {
                String key = keyValue[0].trim();
                String value = keyValue[1].trim();
                if (value.startsWith("{")) {
                    // 处理值为对象,递归处理
                    map.put(key, jsonToMapByHand(value));
                } else {
                    // 处理值为字符串、数字、布尔类型、null
                    if (value.startsWith("\"") && value.endsWith("\"")) {
                        value = value.substring(1, value.length() - 1);
                    }
                    if (value.equals("null")) {
                        value = null;
                    } else if (value.equals("true")) {
                        value = "1";
                    } else if (value.equals("false")) {
                        value = "0";
                    }
                    map.put(key, value);
                }
            }
        }
    }
    return map;
}

首先去掉JSON字符串的首尾大括号,然后分离出键值对,对值进行处理。对于值为对象的键值对,使用递归处理。

五、JSON转Map方式

除了将JSON转换成Map对象外,也可以将JSON转换成其他Java集合对象,如List和Set等。

/**
 * JSON转List
 *
 * @param jsonStr JSON字符串
 * @return List<Map>
 */
public static List<Map> jsonToList(String jsonStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        return objectMapper.readValue(jsonStr, new TypeReference<List<Map>>() {
        });
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

/**
 * JSON转Set
 *
 * @param jsonStr JSON字符串
 * @return Set<Map>
 */
public static Set<Map> jsonToSet(String jsonStr) {
    List<Map> list = jsonToList(jsonStr);
    if (list != null) {
        return new HashSet(list);
    }
    return null;
}

使用ObjectMapper的readValue()方法将JSON字符串转换成List<Map<String, Object>>对象,或者先将JSON字符串转换成List<Java对象>,再转换成List<Map<String, Object>>对象。从List转换成Set可以使用HashSet的构造函数。

六、JSON转Map的6种方法

经过上述的讲解,可以总结出JSON转Map的6种方法:

  1. 使用Jackson等库提供的API将JSON转换成Map对象
  2. 将JSON数组转换成List,再将List转换成Map对象
  3. 将JSON转换成Java对象,再将Java对象转换成Map对象
  4. 使用自己实现的JSON转Map方法
  5. 将JSON转换成其他Java集合对象,如List和Set等
  6. 将JSON转换成字符串,再使用Java的正则表达式等方法解析字符串成Map对象

七、JSON转Map最快的方法

对于性能要求高的场景,使用快速JSON库可以实现更快的JSON转Map。

/**
 * 快速JSON转Map
 *
 * @param jsonStr JSON字符串
 * @return Map
 */
public static Map jsonToMapFast(String jsonStr) {
    return JSON.parseObject(jsonStr, new TypeReference<Map>() {
    });
}

使用FastJson的parseObject()方法将JSON字符串转换成Map对象,其中new TypeReference<Map<String, Object>>(){}指定返回的Map的键值类型为String和Object。

八、JSON转Map保留null

默认情况下,JSON转换成Java对象时,会将值为null的属性忽略掉。如果需要保留值为null的属性,可以使用Jackson等库提供的配置。

/**
 * JSON转Map保留null
 *
 * @param jsonStr JSON字符串
 * @return Map
 */
public static Map jsonToMapWithNull(String jsonStr) {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
    try {
        return objectMapper.readValue(jsonStr, new TypeReference<Map>() {
        });
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

使用ObjectMapper的setSerializationInclusion()方法将null值序列化到JSON字符串中。

九、JSON转Map指定泛型

如果需要将JSON转换成Map<String, List<Java对象>>等泛型类型,可以使用Jackson等库提供的API指定泛型。

/**
 * JSON转Map指定泛型
 *
 * @param jsonStr       JSON字符串
 * @param genericType   泛型类型
 * @param elementClazz  泛型元素类型
 * @param            泛型类型
 * @return Map
 */
public static  Map jsonToMapWithType(String jsonStr, Class genericType, Class elementClazz) {
    ObjectMapper objectMapper = new ObjectMapper();
    JavaType type = objectMapper.getTypeFactory().constructMapType(genericType, String.class, elementClazz);
    try {
        return objectMapper.readValue(jsonStr, type);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

使用ObjectMapper的getTypeFactory()方法构造Map<String, List<Java对象>>等泛型类型。

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

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

相关推荐

  • JSON的MD5

    在Web开发过程中,JSON(JavaScript Object Notation)是最常用的数据格式之一。MD5(Message-Digest Algorithm 5)是一种常用…

    编程 2025-04-29
  • 使用Java将JSON写入HDFS

    本篇文章将从以下几个方面详细阐述Java将JSON写入HDFS的方法: 一、HDFS简介 首先,先来了解一下Hadoop分布式文件系统(HDFS)。HDFS是一个可扩展性高的分布式…

    编程 2025-04-29
  • 如何使用Newtonsoft datatable转Json

    Newtonsoft DataTable 是一个基于.NET的JSON框架,也是一个用于序列化和反序列化JSON的强大工具。 在本文中,我们将学习如何使用Newtonsoft Da…

    编程 2025-04-28
  • JPRC – 轻松创建可读性强的 JSON API

    本文将介绍一个全新的 JSON API 框架 JPRC,通过该框架,您可以轻松创建可读性强的 JSON API,提高您的项目开发效率和代码可维护性。接下来将从以下几个方面对 JPR…

    编程 2025-04-27
  • 使用Python获取JSON并解析

    本文将介绍如何使用Python获取JSON数据并解析相关内容。通过使用Python的第三方库,我们可以轻松地处理JSON数据,包括读取、提取和操作JSON数据。 一、获取JSON数…

    编程 2025-04-27
  • Python存为JSON的方法及实例

    本文将从以下多个方面对Python存为JSON做详细的阐述。 一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅…

    编程 2025-04-27
  • 使用Spread 8展示JSON数据

    使用Spread 8可以方便地展示JSON数据,本文将详细介绍如何利用Spread 8展示JSON数据。 一、Spread 8简介 Spread 8是一款强大的电子表格软件,可以方…

    编程 2025-04-27
  • 如何在json转实体类时忽略大小写

    本文将从以下几个方面介绍如何在json转实体类时忽略大小写。 一、使用Gson库实现json转实体类忽略大小写 Gson是Google提供的Java JSON操作库,它提供了简单易…

    编程 2025-04-27
  • C# 中 JSON null 不显示的处理方法

    本文将为大家介绍在 C# 中处理 JSON null 不显示的解决方法。 一、null 不显示的问题 在使用 C# 进行 JSON 数据处理的时候,经常会遇到 null 值不显示的…

    编程 2025-04-27
  • index.html怎么打开 – 详细解析

    一、index.html怎么打开看 1、如果你已经拥有了index.html文件,那么你可以直接使用任何一个现代浏览器打开index.html文件,比如Google Chrome、…

    编程 2025-04-25

发表回复

登录后才能评论