JAVA--JSON转换工具类

news2024/11/19 0:38:19

JSON转换工具类

在这里插入图片描述

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import jakarta.validation.constraints.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;


public class Json {

    private static final Logger logger = LoggerFactory.getLogger(Json.class);

    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    static {
        // 如果为空则不输出
        OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
        // 对于空的对象转json的时候不抛出错误
        OBJECT_MAPPER.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
        // 禁用序列化日期为timestamps
        OBJECT_MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        // 禁用遇到未知属性抛出异常
        OBJECT_MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    }

    /**
     * 对象转json
     *
     * @param object 对象
     * @return json
     */
    public static String toJsonString(Object object) {
        try {
            return OBJECT_MAPPER.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            logger.error("toJsonString() error: {}", e.getMessage());
        }
        return "";
    }

    /**
     * json转换换成对象
     *
     * @param json  json
     * @param clazz clazz
     * @return Class
     */
    public static <T> T parseObject(String json, Class<T> clazz) {
        if (json == null) {
            return null;
        }
        T result = null;
        try {
            result = OBJECT_MAPPER.readValue(json, clazz);
        } catch (Exception e) {
            logger.error("parseObject() error: {}", e.getMessage());
        }
        return result;
    }

    /**
     * json转换换成对象
     *
     * @param src   src
     * @param clazz clazz
     * @return Class
     */
    public static <T> T parseObject(byte[] src, Class<T> clazz) {
        T result = null;
        try {
            result = OBJECT_MAPPER.readValue(src, clazz);
        } catch (Exception e) {
            logger.error("parseObject() error: {}", e.getMessage());
        }
        return result;
    }

    @NotNull
    @SuppressWarnings("unused")
    public static ObjectMapper getObjectMapper() {
        return OBJECT_MAPPER;
    }

    /**
     * *
     * <a href="https://stackoverflow.com/questions/6349421/how-to-use-jackson-to-deserialise-an-array-of-objects">...</a>
     * * List<MyClass> myObjects = Arrays.asList(mapper.readValue(json, MyClass[].class))
     * * works up to 10 time faster than TypeReference.
     *
     * @return List数组
     */
    @SuppressWarnings("unused")
    public static <T> List<T> parseArray(String json, Class<T[]> clazz) {
        if (json == null) {
            return null;
        }
        T[] result = getTs(json, clazz);
        if (result == null) {
            return Collections.emptyList();
        }
        return Arrays.asList(result);
    }

    @Nullable
    private static <T> T[] getTs(String json, Class<T[]> clazz) {
        T[] result = null;
        try {
            result = OBJECT_MAPPER.readValue(json, clazz);
        } catch (Exception e) {
            logger.error("parseArray() error: {}", e.getMessage());
        }
        return result;
    }

    @SuppressWarnings("unused")
    public static <T> List<T> parseArray(byte[] src, Class<T[]> clazz) {
        T[] result = null;
        try {
            result = OBJECT_MAPPER.readValue(src, clazz);
        } catch (Exception e) {
            logger.error("parseArray() error: {}", e.getMessage());
        }
        if (result == null) {
            return Collections.emptyList();
        }
        return Arrays.asList(result);
    }


    /**
     * 转换成json节点,即map
     *
     * @param jsonStr jsonStr
     * @return JsonNode
     */
    @SuppressWarnings("unused")
    public static JsonNode parseJson(String jsonStr) {
        if (jsonStr == null) {
            return null;
        }
        JsonNode jsonNode = null;
        try {
            jsonNode = OBJECT_MAPPER.readTree(jsonStr);
        } catch (Exception e) {
            logger.error("parseJson() error: {}", e.getMessage());
        }
        return jsonNode;
    }

    @SuppressWarnings("unused")
    public static String[] PRODUCT_TIME_COLUMN = new String[]{"createTime", "updateTime", "checkTime"};
    @SuppressWarnings("unused")
    public static String[] ORDER_TIME_COLUMN = new String[]{"createTime", "updateTime", "payTime", "deliveryTime", "finallyTime", "shopCartTime", "cancelTime", "inquiryCheckTime"};
    @SuppressWarnings("unused")
    public static String[] SHARE_TIME_COLUMN = new String[]{"createTime", "updateTime", "payTime", "orderCompleteTime", "confirmTime", "applyTime", "submitTime", "callBackTime"};

    @SuppressWarnings("unused")
    public static JSONObject formatterDateToLong(@NotNull JSONObject json, String... keys) {

        if (keys != null) {
            for (String key : keys) {
                if (json.containsKey(key) && json.getDate(key) != null) {
                    json.put(key, json.getDate(key).getTime());
                }
            }
        }

        return json;

    }

    @SuppressWarnings("unused")
    public static JSONObject formatterLongToDate(@NotNull JSONObject json, String... keys) {

        if (keys != null) {
            for (String key : keys) {
                if (json.containsKey(key) && json.getLong(key) != null) {
                    json.put(key, new Date(json.getLong(key)));
                }
            }
        }

        return json;

    }

    @SuppressWarnings("unused")
    public static JSONObject formatterLongToLocalDateTime(JSONObject json, String... keys) {

        if (keys != null) {
            for (String key : keys) {
                if (json.containsKey(key) && json.getLong(key) != null) {
                    json.put(key, TimeUtil.timestamp2LocalDateTime(json.getLong(key)));
                }
            }
        }

        return json;

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1896588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅析MySQL-索引篇01

什么是索引&#xff1f; 索引是帮助存储引擎快速获取数据的一种数据结构&#xff0c;类似于数据的目录。 索引的分类 按数据结构分类&#xff1a; MySQL 常见索引有 BTree 索引、HASH 索引、Full-Text 索引。 Innodb是MySQL5.5之后的默认存储引擎&#xff0c;BTree索引类型也…

一些感想。

1.double必须用double的输出&#xff08;“%lf”&#xff09; 我还以为是什么bug。。 2.sqrt&#xff0c;pow只要include cmath之后就能用了&#xff0c;我pow()没有devc艹的提示&#xff0c;还以为我记错了&#xff0c;早知道运行一下了 cnm公式写错了 #include <iostre…

无人机人员搜救

人员搜救-水域救援 水域搜救&#xff1a;快速水面搜查 物资抛投&#xff1a;救生物资抛投 绳索牵引&#xff1a;牵引救援绳索 领航船艇&#xff1a;水面侦察领航 人员搜救 昼夜搜救&#xff0c;精准定位 水域搜救 经纬 M300 RTK 搭载禅思 H20T 能够满足全天候作业需求&a…

YUM——简介、安装(Ubuntu22.04)

1、简介 YUM&#xff08;Yellowdog Updater, Modified&#xff09;是一个开源的命令行软件包管理工具&#xff0c;主要用于基于 RPM 包管理系统的 Linux 发行版&#xff0c;如 CentOS、Red Hat Enterprise Linux (RHEL) 和 Fedora。YUM 使用户能够轻松地安装、更新、删除和管理…

【项目管理】项目风险管理(Word原件)

风险和机会管理就是在一个项目开发过程中对风险进行识别、跟踪、控制的手段。风险和机会管理提供了对可能出现的风险进行持续评估&#xff0c;确定重要的风险机会以及实施处理的策略的一种规范化的环境。包括识别、分析、制定处理和减缓行动、跟踪 。合理的风险和机会管理应尽力…

深度学习-数学基础(四)

深度学习数学基础 数学基础线性代数-标量和向量线性代数-向量运算向量加和向量内积向量夹角余弦值 线性代数-矩阵矩阵加法矩阵乘法矩阵点乘矩阵计算的其他内容 人工智能-矩阵的操作矩阵转置&#xff08;transpose&#xff09;矩阵与向量的转化 线性代数-张量&#xff08;tensor…

计算机应用数学--第一次作业

第一次作业计算题编程题 &#xff08;20分&#xff09; 第一次作业 计算题 &#xff08;20分&#xff09;求 E ( X ) E(X) E(X)&#xff0c; V a r ( X ) Var(X) Var(X) &#xff08;1&#xff09; X X X 服从 [ a , b ] [a,b] [a,b] 均匀分布。 &#xff08;2&#xff09;…

鸿蒙开发设备管理:【@ohos.thermal (热管理)】

热管理 该模块提供热管理相关的接口&#xff0c;包括热档位查询及注册回调等功能。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shi…

24西安电子科技大学数学与统计学院—考研录取情况

24西安电子科技大学—数学与统计学院—考研录取统计 01、数学与统计学院各个方向 02、24数学与统计学院近三年复试分数线对比 数统院24年院线相对于23年院线增加高达30分&#xff0c;确实增长浮动比较高&#xff0c;接近30分的水平&#xff0c;因此大家更需要好好去努力&#x…

swiftui中设置建议最多5个tabItem项,多个tabItem项会被自动折叠起来

在swiftui中设置底部的菜单栏的时候&#xff0c;最多建议设置5个&#xff0c;如果超过了&#xff0c;会被自动折叠到More中&#xff0c;点击More就会出现类似list的样式显示&#xff0c;不是很友好。 最多按照5个默认设置的话&#xff0c;就会正常全部显示出来&#xff1a; 测…

idea如何连接gitee仓库

1.先在idea上登录gitee账号 在gitee官网上生成令牌。 点击生成新令牌。 复制到idea上就行了。然后登陆成功。 2.连接gitee 把项目的https克隆到idea中就行了。

谷粒商城学习-10-docker安装mysql

文章目录 一&#xff0c;拉取MySQL镜像1&#xff0c;搜索MySQL的Docker镜像2&#xff0c;拉取MySQL镜像3&#xff0c;查看已经拉取的镜像 二&#xff0c;创建、启动MySQL容器1&#xff0c;使用docker run创建启动容器2&#xff0c;使用docker ps查看运行状态的容器3&#xff0c…

深入了解图解并发线程

1. 线程状态 要求 掌握 Java 线程六种状态掌握 Java 线程状态转换能理解五种状态与六种状态两种说法的区别 六种状态及转换 分别是 新建 当一个线程对象被创建&#xff0c;但还未调用 start 方法时处于新建状态此时未与操作系统底层线程关联可运行 调用了 start 方法&#…

docker集群部署主从mysql

搭建一个mysql集群&#xff0c;1主2从&#xff0c;使用docker容器 一、创建docker的mysql镜像 下次补上&#xff0c;因为现在很多网络不能直接pull&#xff0c;操作下次补上。 二、创建mysql容器 创建容器1 docker run -it -d --name mysql_1 -p 7001:3306 --net mynet --…

Portainer 是一个开源的容器管理平台-非常直观好用的Docker图形化项目

在这个容器化技术大行其道的时代&#xff0c;Docker和Kubernetes几乎成了技术圈的新宠。可是管理起容器来&#xff0c;有时候还是有点头大。命令行操作对于某些小伙伴来说&#xff0c;可能还是有点不太友好。 今天开源君分享一个叫 Portainer 的开源项目&#xff0c;一个用来简…

Zabbix 配置grafana对接

zabbix对接grafana简介 Zabbix与Grafana对接可以实现更加丰富和美观的数据可视化&#xff0c;可以利用Grafana强大的可视化功能来展示Zabbix收集的数据。 Grafana 本身是提供了Zabbix的对接插件&#xff0c;开箱即用&#xff0c;安装好了之后点击 enable 一下就能启用。然后就…

Mysql 的第二次作业

一、数据库 1、登陆数据库 2、创建数据库zoo 3、修改数据库zoo字符集为gbk 4、选择当前数据库为zoo 5、查看创建数据库zoo信息 6、删除数据库zoo 1&#xff09;登陆数据库。 打开命令行&#xff0c;输入登陆用户名和密码。 mysql -uroot -p123456 ​ 2&#xff09;切换数据库…

macOS版ChatGPT更新:修复AI对话纯文本存储问题

猫头虎 &#x1f42f; 建联猫头虎&#xff0c;商务合作&#xff0c;产品评测&#xff0c;产品推广&#xff0c;个人自媒体创作&#xff0c;超级个体&#xff0c;涨粉秘籍&#xff0c;一起探索编程世界的无限可能&#xff01; macOS版ChatGPT更新&#xff1a;修复AI对话纯文本…

鸿蒙系统的开发与学习

1.开发工具的下载 DevEco Studio-HarmonyOS Next Beta版-华为开发者联盟 安装、环境配置时&#xff0c;建议 自定义目录 注意&#xff1a;路径中不要有 中文、特殊字符。 2.ArkTS基础总结 1&#xff09;三种数据类型 ① string 字符串&#xff1a;描述信息 ② number 数…

内网学习第6天 liunx定时任务 环境变量和权限配置,以及数据库提权

内网学习的第5天呢&#xff1f;&#xff1f;我就没有写&#xff0c;那个主要就是利用内核漏洞以及suid&#xff0c;来进行提权的。 我在虚拟机上面进行提权&#xff0c;我没有成功&#xff0c;我本地的虚拟机呢&#xff0c;扫出来的漏洞poc也没有让我提权成功。所以我就没有写…