Jackson的使用

一引入依赖

<!--Jackson是spring-boot-starter-json的一个依赖(spring-boot-starter-web中包含spring-boot-starter-json)。也就是说,当项目中引入spring-boot-starter-web后会自动引入spring-boot-starter-json -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 简洁代码和方便打印 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version> 
</dependency>

二测试的实体

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Serializable,Cloneable {private static final long serialVersionUID = 6447932156561222739L;private Integer sNo;private String name;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date birthday;private Integer classNo;private String grade;/*** 方便对象复制* @return* @throws CloneNotSupportedException*/@Overrideprotected Student clone() throws CloneNotSupportedException {return (Student) super.clone();}
}

三转json(序列化)

先声明一个类的全局变量

private static ObjectMapper objectMapper = new ObjectMapper();
  1. 实体(JavaBean)转json
Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
String s1Json = objectMapper.writeValueAsString(s1);
log.info("jackson将Student转的json为{}",s1Json);

测试结果:
jackson将Student转的json为{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:1}
2. Map转json

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
Student s2 = s1.clone();
s2.setSNo(2);
Student s3 = s1.clone();
s3.setSNo(3);
Student s4 = s1.clone();
s4.setSNo(4);
Map<String,Student> data = new LinkedHashMap();
data.put("s1",s1);
data.put("s2",s2);
data.put("s3",s3);
data.put("s4",s4);String mapJson = objectMapper.writeValueAsString(data);
log.info("jackson将map转的json为{}",mapJson);

测试结果:
jackson将map转的json为{“s1”:{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:1},“s2”:{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:2},“s3”:{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:3},“s4”:{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:4}}
3. List转json

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
Student s2 = s1.clone();
s2.setSNo(2);
Student s3 = s1.clone();
s3.setSNo(3);
Student s4 = s1.clone();
s4.setSNo(4);List<Student> studentList = new ArrayList<>(Arrays.asList(s1,s2,s3,s4));
String listJson = objectMapper.writeValueAsString(studentList);
log.info("jackson将List转的json为{}",listJson);

测试结果:
jackson将List转的json为[{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:1},{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:2},{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:3},{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:4}]

四转java对象(反序列化)

  1. 转实体(JavaBean)
Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
String s1Json = objectMapper.writeValueAsString(s1);
log.info("jackson将Student转的json为{}",s1Json);Student json1Student1 = objectMapper.readValue(s1Json,Student.class);
log.info("jackson转实体Student结果:{}",json1Student1);JavaType studentType1 = objectMapper.getTypeFactory().constructType(Student.class);
Student json1Student2 = objectMapper.readValue(s1Json,studentType1);
log.info("jackson转实体Student结果:{}",json1Student2);Student json1Student3 = objectMapper.readValue(s1Json, new TypeReference<Student>() {});
log.info("jackson转实体Student结果:{}",json1Student3);

测试结果:
jackson转实体Student结果:Student(sNo=1, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级)
2. 转Map

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
Student s2 = s1.clone();
s2.setSNo(2);
Student s3 = s1.clone();
s3.setSNo(3);
Student s4 = s1.clone();
s4.setSNo(4);
Map<String,Student> data = new LinkedHashMap();
data.put("s1",s1);
data.put("s2",s2);
data.put("s3",s3);
data.put("s4",s4);String mapJson = objectMapper.writeValueAsString(data);
log.info("jackson将map转的json为{}",mapJson);Map<String,Student> json2map = objectMapper.readValue(mapJson,Map.class);
log.info("jackson转Map结果:{}",json2map);

测试结果:
jackson转Map结果:{s1={name=张三, birthday=2024-06-16 16:42:07, classNo=1001, grade=一年级, sno=1}, s2={name=张三, birthday=2024-06-16 16:42:07, classNo=1001, grade=一年级, sno=2}, s3={name=张三, birthday=2024-06-16 16:42:07, classNo=1001, grade=一年级, sno=3}, s4={name=张三, birthday=2024-06-16 16:42:07, classNo=1001, grade=一年级, sno=4}}
3. 转List

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
Student s2 = s1.clone();
s2.setSNo(2);
Student s3 = s1.clone();
s3.setSNo(3);
Student s4 = s1.clone();
s4.setSNo(4);
List<Student> studentList = new ArrayList<>(Arrays.asList(s1,s2,s3,s4));String listJson = objectMapper.writeValueAsString(studentList);
log.info("jackson将List转的json为{}",listJson);JavaType listType = objectMapper.getTypeFactory().constructCollectionType(List.class,Student.class);
List<Student> json2List = objectMapper.readValue(listJson,listType);
log.info("jackson转List结果:{}",json2List);

测试结果:
jackson转List结果:[Student(sNo=1, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级), Student(sNo=2, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级), Student(sNo=3, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级), Student(sNo=4, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级)]

五常用注解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六其他用法

在这里插入图片描述
在这里插入图片描述
转自IT利刃出鞘
Jackson用例相关链接

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

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

相关文章

4款好用的文本扩展器!!提高工作效率!【送源码】

今天的文章中为大家带来几款好用的文本扩展器&#xff0c;帮助大家提供工作效率&#xff0c;减少重复劳动&#xff5e; Beeftext Beeftext 是一个文本扩展工具&#xff0c;可以帮助用户快速输入短语、段落或者常用的文本片段。它允许你创建自定义的缩写和对应的文本替换&…

使用tkinter创建带有图标的菜单栏

使用tkinter创建带有图标的菜单栏 效果代码代码解析创建主窗口加载图标创建菜单栏添加文件菜单添加带图标的菜单项 Tkinter 的默认菜单外观较为简单&#xff0c;可以通过自定义和添加图标&#xff0c;让菜单显示更好看。 效果 代码 import tkinter as tk from tkinter import …

课时154:项目发布_手工发布_手工发布

1.2.3 手工发布 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 为了合理的演示生产环境的项目代码发布&#xff0c;同时又兼顾实际实验环境的资源&#xff0c;我们这里将 B主机和C主机 用一台VM主机来实现&#xff0c;A主机单…

Arduino入门2——常用函数及用法

Arduino入门2——串口驱动函数及用法 IO串口 上期&#xff0c;我们简单的认识了一下Arduino&#xff0c;浅浅的入了个门&#xff0c;这一期我们介绍以下Arduino串口常用的函数及用法 IO 常用串口库函数如下&#xff1a; 函数名用法及解析pinMode()用于IO口初始化digitalWrite…

2024050802-重学 Java 设计模式《实战模板模式》

重学 Java 设计模式&#xff1a;实战模版模式「模拟爬虫各类电商商品&#xff0c;生成营销推广海报场景」 一、前言 黎明前的坚守&#xff0c;的住吗&#xff1f; 有人举过这样一个例子&#xff0c;先给你张北大的录取通知书&#xff0c;但要求你每天5点起床&#xff0c;12点…

Proteus 新建工程

Proteus 新建工程 新建简单工程 首先在File工具栏中点击New Project&#xff0c;弹出新建工程向导程序(New Proteus Wizard) 填写工程名称与存储路径&#xff0c;选择New Proteus并点击Next进行下一步设置 我们不需要生成PCB文件&#xff0c;一路默认&#xff0c;点击Next即…

实战计算机网络02——物理层

实战计算机网络02——物理层 1、物理层实现的功能2、数据与信号2.1 数据通信模型2.2 通信领域常用术语2.3 模拟信号和数字信号 3、信道和调制3.1 信道3.2 单工通信、半双工通信、全双工通信3.3 调制3.4 奈式准则3.5 香农定律 4、传输媒体4.1 导向传输媒体4.2 非导向传输媒体 5、…

高级人工智能复习 题目整理 中科大

题目整理 填空 1.准确性&#xff0c;复杂性&#xff0c;验证集 2. 3 2 n 3^{2^n} 32n 3 C 2 n m 3^{C^m_{2n}} 3C2nm​ 3 m 3^m 3m n 1 n1 n1 3. 状态 从状态s采取行动a后继续采用策略 π \pi π的收益 环境 4. 语法 语义 推理规则 5. 参与者&#xff0c;策略集&#xff…

Elasticsearch 8.1官网文档梳理 - 十一、Ingest pipelines(管道)

Ingest pipelines 管道&#xff08;Ingest pipelines&#xff09;可让让数据在写入前进行常见的转换。例如可以利用管道删除文档&#xff08;doc&#xff09;的字段、或从文本中提取数据、丰富文档&#xff08;doc&#xff09;的字段等其他操作。 管道&#xff08;Ingest pip…

VirtualBox、Centos7下安装docker后pull镜像问题、ftp上传文件问题

Docker安装篇(CentOS7安装)_docker 安装 centos7-CSDN博客 首先&#xff0c;安装docker可以根据这篇文章进行安装&#xff0c;安装完之后&#xff0c;我们就需要去通过docker拉取相关的服务镜像&#xff0c;然后安装相应的服务容器&#xff0c;比如我们通过docker来安装mysql,…

vue 使用 ztree 超大量数据,前端树形结构展示

ztree 是一个很经典的基于jquey开发的树结构编辑展示UI组件库。 创建一个文件 ztree.vue&#xff0c;代码如下&#xff1a; <template><div><div class"ztree vue-giant-tree" :id"ztreeId"></div><div class"treeBox&q…

Termius安装docker

安装Termius 直接上官网 新建主机 更新一下yum 更新完成 安装docker的包 直接用命令安装 设置一下开机启动&#xff0c;可以查看docker的版本

Ui学习--UITableView

UI学习 UITableView基础UITableView协议UITableView高级协议与单元格总结 UITableView基础 UITableView作为iOS中的一个控件&#xff0c;用于以表格形式展示数据。例如通讯录好友&#xff0c;朋友圈信息等&#xff0c;都是UITableView的实际运用场景。 首先我们先要加入两个协…

K210使用雷龙NAND完成火灾检测

NAND 文章目录 NAND前言一、NAND是什么&#xff1f;二、来看一看NAND三、部署火灾检测 前言 前几天收到了雷龙NAND的芯片&#xff0c;一共两个芯片和一个转接板&#xff0c;我之前也没有使用过这款芯片&#xff0c;比较好奇&#xff0c;体验了一下&#xff0c;个人认为&#x…

嵌入式微处理器重点学习(三)

堆栈操作 R1=0x005 R3=0x004 SP=0x80014 STMFD sp!, {r1, r3} 指令STMFD sp!, {r1, r3}是一条ARM架构中的存储多个寄存器到内存的指令,这里用于将r1和r3寄存器的内容存储到栈上。STMFD(Store Multiple Full Descending)是一种全递减模式的多寄存器存储指令,它会先将栈指针…

three.js 基础01

1.场景创建 Scene() 2.常用形状集几何体「Geometry」[可设置长宽高等内容,如:new THREE.BoxGeometry(...)] 长方体 BoxGeometry圆柱体CylinderGeometry 球体SphereGeometry圆锥体ConeGeometry矩形平面 PlaneGeometry 圆面体CircleGeometry 3.常用材质「Materi…

linux 部署瑞数6实战(维普,药监局)sign第二部分

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx …

C/C++李峋同款跳动的爱心代码

一、写在前面 在编程的世界里&#xff0c;代码不仅仅是冷冰冰的命令&#xff0c;它也可以成为表达情感、传递浪漫的工具。今天&#xff0c;就让小编带着大家用C语言打造出李峋同款跳动的爱心吧&#xff01; 首先&#xff0c;我们需要知道C作为一种高级编程语言&#xff0c;拥…

宠物健康顾问系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;顾问管理&#xff0c;用户管理&#xff0c;健康知识管理&#xff0c;管理员管理&#xff0c;论坛管理&#xff0c;公告管理 顾问账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;顾…

头歌资源库(7)汉诺塔(循环)

一、 问题描述 二、算法思想 初始化三个柱子A、B、C&#xff0c;初始时所有的盘子都在柱子A上。对于从1到N&#xff08;N表示盘子的数量&#xff09;的每一个数字i&#xff0c;执行以下循环&#xff1a; a. 如果i是偶数&#xff0c;则将柱子B视为目标柱子&#xff0c;柱子C视为…