利用Jackson封装常用的JsonUtil工具类
在实际开发中,我们对于 JSON 数据的处理,通常有这么几个第三方工具包可以使用:
- gson:谷歌的
- fastjson:阿里巴巴的
- jackson:美国FasterXML公司的,Spring框架默认用的
由于以前一直用习惯了阿里的 fastjson,最近突然改为 jackson ,不是太习惯,所以手写一个工具类,应付一下工作中常用的一些方法。
1. 引入依赖包
在 pom.xml 文件中加入以下依赖
<!-- 引入jackson依赖包-->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.14.2</version>
</dependency>
2. 编写 JsonUtil 工具类
package com.yuhuofei.utils;import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
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 com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;/*** @Description 由于习惯了用fastjson处理JSON数据,突然改成用jackson,有些不适应,所以打算用jackson封装出类似fastjson里的方法进行使用* @ClassName JsonUtil* @Author yuhuofei* @Date 2023/8/19 14:36* @Version 1.0*/
@Slf4j
public class JsonUtil {private static ObjectMapper objectMapper = new ObjectMapper();// 时间日期格式private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";//以静态代码块初始化static {//对象的所有字段全部列入序列化objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);//取消默认转换timestamps形式objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//忽略空Bean转json的错误objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);//所有的日期格式都统一为以下的格式,即yyyy-MM-dd HH:mm:ssobjectMapper.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));//忽略 在json字符串中存在,但在java对象中不存在对应属性的情况。防止错误objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);}/**===========================以下是从JSON中获取对象====================================*/public static <T> T parseObject(String jsonString, Class<T> object) {T t = null;try {t = objectMapper.readValue(jsonString, object);} catch (JsonProcessingException e) {log.error("JsonString转为自定义对象失败:{}", e.getMessage());}return t;}public static <T> T parseObject(File file, Class<T> object) {T t = null;try {t = objectMapper.readValue(file, object);} catch (IOException e) {log.error("从文件中读取json字符串转为自定义对象失败:{}", e.getMessage());}return t;}//将json数组字符串转为指定对象List列表或者Map集合public static <T> T parseJSONArray(String jsonArray, TypeReference<T> reference) {T t = null;try {t = objectMapper.readValue(jsonArray, reference);} catch (JsonProcessingException e) {log.error("JSONArray转为List列表或者Map集合失败:{}", e.getMessage());}return t;}/**=================================以下是将对象转为JSON=====================================*/public static String toJSONString(Object object) {String jsonString = null;try {jsonString = objectMapper.writeValueAsString(object);} catch (JsonProcessingException e) {log.error("Object转JSONString失败:{}", e.getMessage());}return jsonString;}public static byte[] toByteArray(Object object) {byte[] bytes = null;try {bytes = objectMapper.writeValueAsBytes(object);} catch (JsonProcessingException e) {log.error("Object转ByteArray失败:{}", e.getMessage());}return bytes;}public static void objectToFile(File file, Object object) {try {objectMapper.writeValue(file, object);} catch (JsonProcessingException e) {log.error("Object写入文件失败:{}", e.getMessage());} catch (IOException e) {e.printStackTrace();}}/**=============================以下是与JsonNode相关的=======================================*///JsonNode和JSONObject一样,都是JSON树形模型,只不过在jackson中,存在的是JsonNodepublic static JsonNode parseJSONObject(String jsonString) {JsonNode jsonNode = null;try {jsonNode = objectMapper.readTree(jsonString);} catch (JsonProcessingException e) {log.error("JSONString转为JsonNode失败:{}", e.getMessage());}return jsonNode;}public static JsonNode parseJSONObject(Object object) {JsonNode jsonNode = objectMapper.valueToTree(object);return jsonNode;}public static String toJSONString(JsonNode jsonNode) {String jsonString = null;try {jsonString = objectMapper.writeValueAsString(jsonNode);} catch (JsonProcessingException e) {log.error("JsonNode转JSONString失败:{}", e.getMessage());}return jsonString;}//JsonNode是一个抽象类,不能实例化,创建JSON树形模型,得用JsonNode的子类ObjectNode,用法和JSONObject大同小异public static ObjectNode newJSONObject() {return objectMapper.createObjectNode();}//创建JSON数组对象,就像JSONArray一样用public static ArrayNode newJSONArray() {return objectMapper.createArrayNode();}/**===========以下是从JsonNode对象中获取key值的方法,个人觉得有点多余,直接用JsonNode自带的取值方法会好点,出于纠结症,还是补充进来了*/public static String getString(JsonNode jsonObject, String key) {String s = jsonObject.get(key).asText();return s;}public static Integer getInteger(JsonNode jsonObject, String key) {Integer i = jsonObject.get(key).asInt();return i;}public static Boolean getBoolean(JsonNode jsonObject, String key) {Boolean bool = jsonObject.get(key).asBoolean();return bool;}public static JsonNode getJSONObject(JsonNode jsonObject, String key) {JsonNode json = jsonObject.get(key);return json;}
}3. 测试
新建一个 User 类
package com.yuhuofei.entity;import lombok.Data;import java.io.Serializable;/*** @Description* @ClassName User* @Author yuhuofei* @Date 2023/8/19 14:49* @Version 1.0*/
@Data
public class User implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private String name;private String passWord;
}新建一个测试类
import com.yuhuofei.entity.User;
import com.yuhuofei.utils.JsonUtil;/*** @Description* @ClassName TestJsonUtil* @Author yuhuofei* @Date 2023/8/19 14:58* @Version 1.0*/
public class TestJsonUtil {public static void main(String[] args) {String jsonString = "{\"id\":11,\"name\":\"小明\",\"passWord\":\"123456\"}";User user = JsonUtil.parseObject(jsonString, User.class);System.out.println(user);}
}执行 main 方法测试,可以看到在控制台正确地输出了结果。
 
相关文章:
 
利用Jackson封装常用的JsonUtil工具类
在实际开发中,我们对于 JSON 数据的处理,通常有这么几个第三方工具包可以使用: gson:谷歌的fastjson:阿里巴巴的jackson:美国FasterXML公司的,Spring框架默认用的 由于以前一直用习惯了阿里的…...
 
阿里云2核4G服务器配置汇总表_轻量和ECS
阿里云2核4G服务器配置价格表,297元一年,配置为轻量应用服务器2核4G、4M带宽、60GB高效云盘,折合24元一个月。 目录 2核4G服务器轻量: 2核4G服务器ECS 关于轻量和ECS的区别: 2核4G服务器轻量: 云服务器…...
 
攻防世界-ics-06
原题解题思路 看着页面多,其实只有报表中心能够跳转,但是选了确定后没反应,应该不是注入,只有id会变化。 在burp中设置好负载进行爆破 有一个长度与众不同的包 打开发现flag。...
 
人工智能轨道交通行业周刊-第56期(2023.8.14-8.20)
本期关键词:数字化建设、巡检机器人、智慧城轨、福州地铁4号线、避雷器、LangChain 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMet…...
 
ruoyi-vue-pro yudao 项目报表设计器 积木报表模块启用及相关SQL脚本
目前ruoyi-vue-pro 项目虽然开源,但是report模块被屏蔽了,查看文档却要收费 199元(知识星球),价格有点太高了吧。 分享下如何启用 report 模块,顺便贴上sql相关脚本。 一、启用模块 修改根目录 pom.xml …...
 
【第三阶段】kotlin中使用带let的安全调用
let常常和?.配合使用,如果前面的对象为null,let不执行,能够执行到let里面 对象一定不为null 1.不为null fun main() {var name:String?"kotlin" //name是一个可空类型,发出广播,调用的地方必须补救措施var…...
 
JavaScript 快速入门手册
本篇文章学习: 菜鸟教程、尚硅谷。 JavaScript 快速入门手册 💯 前言: 本人目前算是一个Java程序员,但是目前环境… ε(ο`*))) 一言难尽啊,blog也好久好久没有更新了,一部分工作原因吧(外包真…...
FreeMarker系列--list的用法(长度,遍历,下标,嵌套,排序)
原文网址:FreeMarker系列--list的用法(长度,遍历,下标,嵌套,排序)_IT利刃出鞘的博客-CSDN博客 简介 本文介绍FreeMarker的list的用法。 大小 Java ArrayList<String> list new ArrayList<String>(); Freemaker ${list?s…...
 
【观察】戴尔科技:构建企业创新“韧性”,开辟数实融合新格局
过去几年,国家高度重视发展数字经济,将其上升为国家战略。其中,“十四五”规划中,就明确提出要推动数字经济和实体经济的深度融合,以数字经济赋能传统产业转型升级;而2023年年初正式发布的《数字中国建设整…...
数据管理平台
数据管理平台项目 文章目录 数据管理平台项目业务1-登录验证代码步骤: token 技术token的使用代码步骤 axios 请求拦截器语法代码示例 axios响应拦截器优化axios响应结果发布文章-富文本编辑器发布文章-频道列表发布文章-封面设置发布文章-收集并保存内容管理-文章列…...
手搓大语言模型 使用jieba分词制作词表,词表大小几十万 加强依赖性
jieba分词词表生成与训练 import numpy as np import paddle import pandas as pd from multiprocessing import Process, Manager, freeze_support from just_mask_em import JustMaskEm, HeadLoss from tqdm import tqdm from glob import glob import jieba import warning…...
 
【校招VIP】java语言类和对象之map、set集合
考点介绍: map、set集合相关内容是校招面试的高频考点之一。 map和set是一种专门用来进行搜索的容器或者数据结构,其搜索效率与其具体的实例化子类有关系。 『java语言类和对象之map、set集合』相关题目及解析内容可点击文章末尾链接查看! …...
 
windows服务器下java程序健康检测及假死崩溃后自动重启应用、开机自动启动
前两天由于项目需要,一个windows上的批处理任务(kitchen.bat),需要接到mq的消息通知后执行,为了快速实现这里我们通过springboot写了一个jar程序,用于接收mq的消息,并调用bat文件。 本程序需要实…...
 
七夕特辑(一)浪漫表白方式 用神经网络生成一首情诗
目录 一、准备工作二、用神经网络生成一首诗,代码说明 牛郎织女相会,七夕祝福要送来。祝福天下有情人,终成眷属永相伴。 七夕是中国传统的情人节,也是恋人们表达爱意的好时机。在这个特别的日子里,送上温馨的祝福&…...
springboot的 spring.redis.lettuce的max-active、max-idle、min-idle的搭配
在Spring Boot中,使用Lettuce作为Redis客户端是一种常见的选择。Lettuce是一个高性能、可扩展的异步Redis客户端。下面是关于application.yml配置文件中spring.redis.lettuce的一些配置: spring:redis:host: localhostport: 6379database: 0lettuce:poo…...
盒子模型样式
🍓盒子属性 属性名称中文注释备注border设置盒子的边框边框宽度 边框类型 边框颜色border-left设置左边框边框宽度 边框类型 边框颜色border-right设置右边框边框宽度 边框类型 边框颜色border-top设置上边框边框宽度 边框类型 边框颜色border-bottom设置下边框边框…...
动态规划入门之线性动态规划
P1115 最大子段和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目要求求连续得一段子串使其累加和最大。 我们做动态规划首先考虑小情况,然后推而广之。 假设三个数1,-2,5. 我们先选1然后我们在-2以及-2加1里边选,我们选…...
 
基于HTML+CSS+Echarts大屏数据可视化集合共99套
基于HTMLCSSEcharts大屏数据可视化集合共99套 一、介绍二、展示1.大数据展示系统2.物流订单系统3.物流信息系统4.办税渠道监控平台5.车辆综合管控平台 三、其他系统实现四、获取源码 一、介绍 基于HTML/CSS/Echarts的会议展览、业务监控、风险预警、数据分析展示等多种展示需求…...
 
Leetcode 0814周总结
本周刷题: 88, 108, 121, 219, 228, 268, 283, 303, 349, 350, 414, 448 88 合并两个有序数组 nums1{1, 2, 3 ,0, 0, 0} nums2{2, 5, 6} 合成效果:nums1{1, 2, 2, 3, 5, 6} 思路:【双指针】对两个数组设置双指针,依次比较哪…...
 
华为网络篇 OSPF的Silent-Interface-33
难度1复杂度1 目录 一、实验拓扑 二、实验步骤 三、实验过程 总结 一、实验拓扑 二、实验步骤 1.搭建如图所示的网络拓扑; 2.初始化各设备,配置相应的IP地址,测试直连网络的连通性; 3.整个网络配置OSPF协议,查看…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
 
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
 
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
 
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
 
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
