Gson的常见用法

一引入依赖

<!-- json解析的工具包 -->
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version>
</dependency>
<!-- 主要为了代码简洁和日志打印 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version> 
</dependency>

二用到的测试实体(不需要序列化和反序列化的字段用transient声明)

@Data
@AllArgsConstructor
public class Student implements Serializable,Cloneable {private static final long serialVersionUID = 6447932156561222739L;private Integer sNo;private String name;private Date birthday;private Integer classNo;private String grade;/*** 方便对象复制* @return* @throws CloneNotSupportedException*/@Overrideprotected Student clone() throws CloneNotSupportedException {return (Student) super.clone();}
}

三转json字符串(序列化)

方便使用,我在测试类将Gson设置为全局变量
在这里插入图片描述

private static final Gson GSON = new Gson();
  1. 对象序列化

 Student s1 = new Student(1,"张三",new Date(),1001,"一年级");String s1Json = GSON.toJson(s1);log.info("Gson将Student转的json为{}",s1Json);

测试结果:
Gson将Student转的json为{“sNo”:1,“name”:“张三”,“birthday”:“Jun 16, 2024 11:14:35 AM”,“classNo”:1001,“grade”:“一年级”}

  1. Map容器序列化(如果Map序列化对数据顺序有要求,可以使用LinkedHashMap)

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 = GSON.toJson(data);
log.info("Gson将map转的json为{}",mapJson);

测试结果:
Gson将map转的json为{“s1”:{“sNo”:1,“name”:“张三”,“birthday”:“Jun 16, 2024 11:14:35 AM”,“classNo”:1001,“grade”:“一年级”},“s2”:{“sNo”:2,“name”:“张三”,“birthday”:“Jun 16, 2024 11:14:35 AM”,“classNo”:1001,“grade”:“一年级”},“s3”:{“sNo”:3,“name”:“张三”,“birthday”:“Jun 16, 2024 11:14:35 AM”,“classNo”:1001,“grade”:“一年级”},“s4”:{“sNo”:4,“name”:“张三”,“birthday”:“Jun 16, 2024 11:14:35 AM”,“classNo”:1001,“grade”:“一年级”}}

  1. 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 = GSON.toJson(studentList);
log.info("Gson将List转的json为{}",listJson);

四json转对象(反序列化)

  1. json转实体,以上面Student为例

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
String s1Json = GSON.toJson(s1);
log.info("Gson将Student转的json为{}",s1Json);
Student json1Student = GSON.fromJson(s1Json,Student.class);
log.info("json转实体Student结果:{}",json1Student);

测试结果:
json转实体Student结果:Student(sNo=1, name=张三, birthday=Sun Jun 16 11:14:35 CST 2024, classNo=1001, grade=一年级)

  1. json转Map

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
String s1Json = GSON.toJson(s1);
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 = GSON.toJson(data);
log.info("Gson将map转的json为{}",mapJson);Map<String,Student> json2map = GSON.fromJson(mapJson,Map.class);
log.info("json转Map结果:{}",json2map);

测试结果:
json转Map结果:{s1={sNo=1.0, name=张三, birthday=Jun 16, 2024 11:14:35 AM, classNo=1001.0, grade=一年级}, s2={sNo=2.0, name=张三, birthday=Jun 16, 2024 11:14:35 AM, classNo=1001.0, grade=一年级}, s3={sNo=3.0, name=张三, birthday=Jun 16, 2024 11:14:35 AM, classNo=1001.0, grade=一年级}, s4={sNo=4.0, name=张三, birthday=Jun 16, 2024 11:14:35 AM, classNo=1001.0, grade=一年级}}

  1. json转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 = GSON.toJson(studentList);
log.info("Gson将List转的json为{}",listJson);Type listType = new TypeToken<ArrayList<Student>>(){}.getType();
List<Student> json2List = GSON.fromJson(listJson,listType);
log.info("json转List结果:{}",json2List);

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

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

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

相关文章

怎么找抖音视频素材?在哪里找爆款热门的素材呢?

在短视频时代&#xff0c;拍摄和分享短视频已经成为一种潮流。但是&#xff0c;许多人都会面临一个问题&#xff0c;那就是——视频素材从哪里来&#xff1f;今天&#xff0c;我将为大家介绍几个优质的网站&#xff0c;让你的视频素材不再愁。 蛙学府&#xff1a;https://www.…

STM32项目分享:智慧农业(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

C++ 54 之 继承中同名的静态成员处理

#include <iostream> using namespace std;// 父类 class Base07{ public:static int m_a; // 静态成员&#xff0c;类内定义static void fun(){cout << "Base中的fun"<< endl;}static void fun(int a){cout << "Base中的fun(int a)&qu…

几个小创新模型,KAN组合网络(LSTM、GRU、Transformer)时间序列预测,python预测全家桶...

截止到本期&#xff0c;一共发了8篇关于机器学习预测全家桶Python代码的文章。参考往期文章如下&#xff1a; 1.终于来了&#xff01;python机器学习预测全家桶 2.机器学习预测全家桶-Python&#xff0c;一次性搞定多/单特征输入&#xff0c;多/单步预测&#xff01;最强模板&a…

【MySQL】索引(上)

https://www.wolai.com/curry00/fzTPy3kSsMDEgEcdvo4G5w https://www.bilibili.com/video/BV1Kr4y1i7ru/?p69 https://jimhackking.github.io/%E8%BF%90%E7%BB%B4/MySQL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/#%E7%B4%A2%E5%BC%95 索引是一种用于快速查询和检索数据的数据结构…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(流程优化)

系列篇章&#x1f4a5; No.文章1AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎的构建与初步实践2AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之GLM-4大模型技术的实践探索3AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之知乎网站数据获…

linux笔记8--安装软件

文章目录 1. PMS和软件安装的介绍2. 安装、更新、卸载安装更新ubuntu20.04更新镜像源&#xff1a; 卸载 3. 其他发行版4. 安装第三方软件5. 推荐 1. PMS和软件安装的介绍 PMS(package management system的简称)&#xff1a;包管理系统 作用&#xff1a;方便用户进行软件安装(也…

【深度学习】解析Vision Transformer (ViT): 从基础到实现与训练

之前介绍&#xff1a; https://qq742971636.blog.csdn.net/article/details/132061304 文章目录 背景实现代码示例解释 训练数据准备模型定义训练和评估总结 Vision Transformer&#xff08;ViT&#xff09;是一种基于transformer架构的视觉模型&#xff0c;它最初是由谷歌研究…

blender bpy将顶点颜色转换为UV纹理vertex color to texture

一、关于环境 安装blender的bpy&#xff0c;不需要额外再安装blender软件。在python控制台中直接输入pip install bpy即可。 二、关于代码 本文所给出代码仅为参考&#xff0c;禁止转载和引用&#xff0c;仅供个人学习。 本文所给出的例子是https://download.csdn.net/downl…

BerkeleyDB练习

代码; #include <db.h> #include <stdio.h>int main() {DB *dbp;db_create(&dbp, NULL, 0);printf("Berkeley DB version: %s\n", db_version(NULL, NULL, NULL));dbp->close(dbp, 0);return 0; } 编译运行

4-异常-log4j配置日志滚动覆盖出现日志丢失问题

4-异常-log4j配置日志打印滚动覆盖出现日志丢失问题(附源码分析) 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&…

XGBoost预测及调参过程(+变量重要性)--血友病计数数据

所使用的数据是血友病数据&#xff0c;如有需要&#xff0c;可在主页资源处获取&#xff0c;数据信息如下&#xff1a; 读取数据及数据集区分 数据预处理及区分数据集代码如下&#xff08;详细预处理说明见上篇文章--随机森林&#xff09;&#xff1a; import pandas as pd im…

异常封装类统一后端响应的数据格式

异常封装类 如何统一后端响应的数据格式 1. 背景 后端作为数据的处理和响应&#xff0c;如何才能和前端配合好&#xff0c;能够高效的完成任务&#xff0c;其中一个比较重要的点就是后端返回的数据格式。 没有统一的响应格式&#xff1a; // 第一种&#xff1a; {"dat…

探索开源世界:2024年值得关注的热门开源项目推荐

文章目录 每日一句正能量前言GitCode成立背景如何使用GitCode如何把你现有的项目迁移至 GitCode&#xff1f;热门开源项目推荐actions-poetry - 管理 Python 依赖项的 GitLab CI/CD 工具项目概述技术分析应用场景特点项目地址 Spider - 网络爬虫框架项目简介技术分析应用场景项…

【RabbitMQ】异步消息及Rabbitmq安装

https://blog.csdn.net/weixin_73077810/article/details/133836287 https://www.bilibili.com/video/BV1mN4y1Z7t9/ 同步调用和异步调用 如果我们的业务需要实时得到服务提供方的响应&#xff0c;则应该选择同步通讯&#xff08;同步调用&#xff09;。 如果我们追求更高的效…

Jupyter Notebook简介

目录 1.概述 2.诞生背景 3.历史版本 4.安装 5.卸载 6.如何使用 7.菜单和菜单项 8.示例 9.未来展望 10.总结 1.概述 Jupyter Notebook是一种基于Web的交互式计算环境&#xff0c;主要用于数据分析、数据科学、机器学习以及探索性编程等领域。允许用户在单个文档中编写…

批量文本编辑神器:一键拆分每行内容,高效实现批量处理与保存,让文本编辑更高效快捷!

在信息化快速发展的今天&#xff0c;文本编辑已经成为我们工作、学习和生活中不可或缺的一部分。然而&#xff0c;面对大量的文本内容&#xff0c;如何高效地进行编辑和处理&#xff0c;成为了许多人面临的难题。今天&#xff0c;我要向大家介绍一款批量文本编辑神器&#xff0…

【C#】图形图像编程

实验目标和要求&#xff1a; 掌握C#图形绘制基本概念&#xff1b;掌握C#字体处理&#xff1b;能进行C#图形图像综合设计。 运行效果如下所示&#xff1a; 1.功能说明与核心代码 使用panel为画板&#xff0c;完成以下设计内容&#xff1a; 使用pen绘制基础图形&#xff1b;使…

【MYSQL】MYSQL操作库

1.数据库字符编码集/数据库校验集 当我们在数据库中保存数据时&#xff0c;需要存和取时候编码一致&#xff0c;比方说你用汉语保存的数据&#xff0c;当你读的时候为了避免乱码问题&#xff0c;也必须用汉语读&#xff0c;这就叫做数据库字符编码集一致。 当我们进行查找&…

C语言的结构体与联合体

引言 C语言提供了结构体和联合体两种聚合数据类型&#xff0c;使得程序员可以创建包括多个数据类型的复杂数据结构。结构体用于将不同类型的数据组合成一个单元&#xff0c;而联合体用于在同一存储空间中存储不同类型的数据。本篇文章将详细介绍C语言中的结构体和联合体&#x…