当前位置: 首页 > news >正文

【高效开发工具系列】gson入门使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.基本介绍
      • 1.什么是 gson?
      • 2.gson 优点?
      • 3.引入依赖
    • 二.简单实用
      • 1.使用示例
      • 2.实体类
    • 三.注意事项
      • 1.处理空值
      • 2.处理异常
      • 3.自定义序列化
      • 4.日期格式
      • 5.字段访问权限
      • 6.循环引用
      • 7.性能优化
      • 8.版本控制

一.基本介绍

1.什么是 gson?

Gson 是 Google 提供的一个用于 Java 编程语言的 JSON 序列化和反序列化库。它可以将 Java 对象转换为 JSON 格式的字符串,也可以将 JSON 格式的字符串转换为 Java 对象。Gson 提供了灵活性和易用性,因此它在处理 JSON 数据时非常受欢迎。

2.gson 优点?

以下是 Gson 的一些主要特性和用途:

  1. 对象序列化和反序列化: Gson 可以将 Java 对象序列化为 JSON 字符串,也可以将 JSON 字符串反序列化为 Java 对象。这使得在前端和后端之间传递数据时变得非常方便。
  2. 支持复杂对象: Gson 能够处理复杂的 Java 对象,包括嵌套对象和集合。它会自动处理对象之间的关系,将它们转换为相应的 JSON 格式。
  3. 自定义序列化和反序列化: Gson 允许开发人员自定义对象的序列化和反序列化过程,以满足特定需求。这通过实现 JsonSerializerJsonDeserializer 接口来实现。
  4. 与 Android 兼容: Gson 适用于 Android 平台,因此它在 Android 开发中也经常被使用。
  5. 性能: Gson 旨在提供高性能的 JSON 处理。它采用了一些优化策略,以确保在处理大量数据时保持高效率。
  6. 开源: Gson 是一个开源项目,可以在 GitHub 上找到其源代码。这意味着开发人员可以查看、修改和贡献代码。

3.引入依赖

<dependencies><!-- Other dependencies --><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.9</version> <!-- Replace with the latest version --></dependency>
</dependencies>

二.简单实用

1.使用示例

以下是一个简单的使用 Gson 进行序列化和反序列化的示例:

import com.google.gson.Gson;public class Example {public static void main(String[] args) {// 创建一个 Java 对象Person person = new Person("John", 25);// 使用 Gson 将对象转换为 JSON 字符串Gson gson = new Gson();String jsonString = gson.toJson(person);System.out.println("JSON String: " + jsonString);// 使用 Gson 将 JSON 字符串转换为对象Person newPerson = gson.fromJson(jsonString, Person.class);System.out.println("Deserialized Person: " + newPerson);}
}

2.实体类

class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}

在这个示例中,Person 类的对象被序列化为 JSON 字符串,然后又被反序列化回一个新的 Person 对象。

三.注意事项

1.处理空值

处理空值: Gson 默认情况下会将 Java 对象中的 null 值序列化为 JSON 字符串中的 null,并在反序列化时将 JSON 字符串中的 null 转换为 Java 对象的 null。确保你的对象在需要时能够处理 null 值。

2.处理异常

处理异常: 在进行反序列化时,要考虑可能出现的异常,如 JSON 字符串与目标对象不匹配、JSON 字符串格式错误等。使用 try-catch 块捕获 JsonSyntaxException 异常或其他可能的异常,并适当处理它们。

3.自定义序列化

自定义序列化和反序列化: 如果你的对象包含复杂的结构或需要特殊处理,可以实现 JsonSerializerJsonDeserializer 接口,以提供自定义的序列化和反序列化逻辑。

4.日期格式

日期格式: Gson 默认使用 ISO 8601 格式来处理日期。如果你的日期格式不符合默认规范,你可能需要设置自定义的日期格式,例如使用 setDateFormat 方法。

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create();

需要指定时间格式,在不同的服务器上时间格式不一样

Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy, h:mm:ss a").create();
String userVOPageStr = stringRedisTemplate.opsForValue().get(key);return gson.fromJson(userVOPageStr, new TypeToken<Page<UserVO>>() {}.getType());

5.字段访问权限

字段访问权限: Gson 默认情况下只处理公共字段和 getter 方法。确保你的对象具有适当的字段访问权限(公共或提供 getter 方法),以便 Gson 能够访问和处理它们。

6.循环引用

循环引用: Gson 默认情况下不处理循环引用。如果你的对象图包含循环引用,你可能需要使用 @Expose 注解来标记不想被序列化的字段,并使用 @SerializedName 来处理字段名称。

class Person {@Expose(serialize = false, deserialize = false)private Person friend;
}

7.性能优化

性能优化: 对于大型数据集,考虑使用 JsonReaderJsonWriter 直接进行流式处理,以避免在内存中保留整个 JSON 树。这可以提高性能并减少内存占用。

8.版本控制

版本控制: 当你的对象模型发生变化时,要注意版本控制,以确保向后和向前兼容性。可以使用 @Since@Until 注解来指定字段的版本信息。

class Person {@Since(1.0)private String name;
}

了解 Gson 的功能和一些高级配置选项,并根据你的具体需求进行配置,可以帮助你更有效地使用该库。官方文档和源代码也是很好的参考资源。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

相关文章:

【高效开发工具系列】gson入门使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Python中的缺失值

Python中的缺失值 1、情景描述2、Python中的缺失值 1、情景描述 在使用Pandas中的文件读取API读取Excel、CSV或TXT等文件时&#xff0c;我们可能需要对读取到的数据进行简单清洗。例如&#xff0c;将其中的表示空值的字符串替换为真正意义上的缺失值 来看一个例子&#xff1a;…...

JVM 字节码

JVM概述 问题引出 你是否也遇到过这些问题&#xff1f; 运行着的线上系统突然卡死&#xff0c;系统无法访问&#xff0c;甚至直接OOM&#xff01;想解决线上JVM GC问题&#xff0c;但却无从下手。新项目上线&#xff0c;对各种JVM参数设置一脸茫然&#xff0c;直接默认吧&…...

ComfiUI API调用随记

来进行知识接力了&#xff1a; 首先了解下ComfiUI的APIstable diffusion comfyui的api使用教程-CSDN博客 对于ComfiUI&#xff0c;接口比较简单。查询接口比较容易看明白。 对于发起prompt的请求&#xff0c;如果需要图片的&#xff0c;则需预先上传图片给ComfiUI&#xff0c…...

Dockerfile讲解

Dockerfile 1. 构建过程解析2. Dockerfile常用保留字指令3. 案例3.1. 自定义镜像mycentosjava83.2. 虚悬镜像 4. Docker微服务实战 dockerfile是用来构建docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 dockerfile定义了进程需要的一切东西&…...

Ansible及其优势是什么?

Ansible是一款极其简单的开源的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。实现了批量系统配置&#xff0c;批量程序部署&#xff0c;批量运行命令等功能。同时Ansible是基于模块工作&#xff0c;…...

使用群晖Docker搭建HomeAssistant并实现异地公网访问家中智能设备

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使…...

重塑生成式AI时代数据战略,亚马逊云科技re:Invent大会Swami主题演讲

re:lnvent 2023 Swami Sivasubramanian主题演讲&#xff0c;数据、AI和人类共进共生&#xff0c;重塑生成式AI时代的数据战略。 赋能人才加持生成式AI必备能 生成式AI创新中心&#xff1a;解决生成式AI工程化挑战。 Amazon Bedrock平台PartyRock&#xff1a;生成式AI应用程序实…...

【恋上数据结构】哈夫曼树学习笔记

哈夫曼树 哈夫曼编码&#xff08;Huffman Coding&#xff09; 哈夫曼编码&#xff0c;又称为霍夫曼编码&#xff0c;它是现代压缩算法的基础 假设要把字符串 [ABBBCCCCCCCCDDDDDDEE] 转成二进制编码进行传输。 可以转成 ASCII 编码 (6569&#xff0c;10000011000101) &…...

前端下拉框select标签的插件——select2.js

本文采用的是select2 版本&#xff1a;Select2 4.0.6-rc.1。 可以兼容IE8及以上。亲测过。 官网&#xff1a;Getting Started | Select2 - The jQuery replacement for select boxes 一、认识select2.js 1、使用插件&#xff0c;首先要引入别人的插件了&#xff0c;你可以选…...

【MySQL的基本命令{DML 和 DDL}】

MySQL的基本命令 {DML 和 DDL} MySQL的基本命令展示所有数据库展示某个数据库中所有的表切换到某个数据库查看当前在哪个数据库查询一张表的全部数据新建一个数据库新建一张表插入一条数据删除一个表删除一个库描述表的信息展示表的创建sql代码展示库的创建sql代码导出数据 &am…...

unity3d模型中缺失animation

在 模型的Rig-Animationtype 设置成Legacy https://tieba.baidu.com/p/2293580178...

搭建自己的wiki知识库【转】

有前端基础&#xff0c;会Markdown、会HTML和CSS&#xff0c;选择 Hexo 有Vue基础可以选择 vuePress 或者 vitePress 会Go可以选择 Hugo 会Rust可以选择 Zola 会Ruby可以选择 Jekyll 会PHP可以考虑使用 WordPress 其他开源项目&#xff1a;docsify、GitBook 详见&#xff1a;如…...

【笔记】常用的Linux命令之解压缩:tar、zip、rar 命令

1、tar 常用压缩和解压缩 # 压缩文件 file1 和目录 dir2 到 test.tar.gz tar -zcvf test.tar.gz file1 dir2 # 解压 test.tar.gz&#xff08;将 c 换成 x 即可&#xff09; tar -zxvf test.tar.gz 额外知识&#xff1a;查看压缩文件内容 # 列出压缩文件的内容 tar -ztvf test…...

谈谈MYSQL索引

基本介绍 索引是帮助MySQL高效获取数据的数据结构&#xff0c;主要是用来提高数据检索的效率&#xff0c;降低数据库的IO成本&#xff0c;同时通过索引列对数据进行排序&#xff0c;降低数据排序的成本&#xff0c;也能降低了CPU的消耗。 通俗来说, 索引就相当于一本书的目录,…...

线程中出现异常的处理

目录 前言 正文 1.线程出现异常的默认行为 2.使用 setUncaughtExceptionHandler() 方法进行异常处理 3.使用 setDefaultUncaughtExceptionHandler() 方法进行异常处理 4.线程组内处理异常 5.线程异常处理的优先性 总结 前言 在紧密交织的多线程环境中&#xff0c;异…...

点击元素以外的事件监听

在项目中&#xff0c;我们经常会遇到需要监听目标元素以外的区域被点击或鼠标移入移出等需求。 例如下面我们有一个表格里面嵌套表单的组件 我希望点击n行的时候&#xff0c;n行的元素变成表单元素进行输入或者选择&#xff0c; 当我点击其他其他区域n行又会恢复成数据展示…...

猫头虎分享ubuntu20.04下VSCode无法输入中文解决方法

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

tcpdump使用心得

参考原文 https://danielmiessler.com/p/tcpdump/ 几个用例 tcpdump -i eth0 显示eth0网卡当前所有的抓包情况eth0是网卡名&#xff0c;可以通过ifconfig获得&#xff0c;也可以通过 tcpdump -D 显示当前可以监听的网卡 -i 参数表示接口&#xff0c;后跟要监听的网卡 tcpdu…...

QJsonObject 是 Qt 框架中用于表示 JSON 对象的类

QJsonObject 是 Qt 框架中用于表示 JSON 对象的类。 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;常用于在不同平台和语言之间传输和存储数据。QJsonObject 类提供了一种方便的方式来创建、解析和操作 JSON 对象。 以下是…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...