💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 推荐: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 的一些主要特性和用途:
- 对象序列化和反序列化: Gson 可以将 Java 对象序列化为 JSON 字符串,也可以将 JSON 字符串反序列化为 Java 对象。这使得在前端和后端之间传递数据时变得非常方便。
- 支持复杂对象: Gson 能够处理复杂的 Java 对象,包括嵌套对象和集合。它会自动处理对象之间的关系,将它们转换为相应的 JSON 格式。
- 自定义序列化和反序列化: Gson 允许开发人员自定义对象的序列化和反序列化过程,以满足特定需求。这通过实现
JsonSerializer
和JsonDeserializer
接口来实现。 - 与 Android 兼容: Gson 适用于 Android 平台,因此它在 Android 开发中也经常被使用。
- 性能: Gson 旨在提供高性能的 JSON 处理。它采用了一些优化策略,以确保在处理大量数据时保持高效率。
- 开源: 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;
}
@Override
public 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.自定义序列化
自定义序列化和反序列化: 如果你的对象包含复杂的结构或需要特殊处理,可以实现 JsonSerializer
和 JsonDeserializer
接口,以提供自定义的序列化和反序列化逻辑。
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.性能优化
性能优化: 对于大型数据集,考虑使用 JsonReader
和 JsonWriter
直接进行流式处理,以避免在内存中保留整个 JSON 树。这可以提高性能并减少内存占用。
8.版本控制
版本控制: 当你的对象模型发生变化时,要注意版本控制,以确保向后和向前兼容性。可以使用 @Since
和 @Until
注解来指定字段的版本信息。
class Person {
@Since(1.0)
private String name;
}
了解 Gson 的功能和一些高级配置选项,并根据你的具体需求进行配置,可以帮助你更有效地使用该库。官方文档和源代码也是很好的参考资源。
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙