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

news2024/11/20 18:21:29

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

    @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.自定义序列化

自定义序列化和反序列化: 如果你的对象包含复杂的结构或需要特殊处理,可以实现 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

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

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

相关文章

解密Prompt系列20. LLM Agent之再谈RAG的召回多样性优化

几个月前我们就聊过RAG的经典方案解密Prompt系列14. LLM Agent之搜索应用设计。前几天刚看完openAI在DevDay闭门会议上介绍的RAG相关的经验&#xff0c;有些新的感悟&#xff0c;借此机会再梳理下RAG相关的优化方案。推荐直接看原视频&#xff08;外网&#xff09;A Survey of …

善网商城上线洁柔产品 公益人专享爱心价官方正品

近日&#xff0c;中国善网慈善商城&#xff08;以下简称善网商城&#xff09;系统经升级后重新上线。目前善网商城线上销售的中顺洁柔旗下慈善产品已顺利获得中顺洁柔纸业股份有限公司授权&#xff0c;双方就合作事宜达成共识&#xff0c;并于近日签订线上经营授权书。 &#x…

问题:HTTP method names must be tokens

问题&#xff1a;HTTP method names must be tokens 2023-12-04T09:43:16.65408:00 INFO 7808 --- [nio-6600-exec-1] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request headerNote: further occurrences of HTTP request parsing errors will be logg…

easyrecovery2024最新破解版激活密钥

平时很多人都会把自己工作时&#xff0c;或者生活中的数据存储在我们的电脑上&#xff0c;很多时候&#xff0c;由于我们的误操作或者是其它某些问题&#xff0c;很容易就会误删除一些文件数据了&#xff0c;尤其是一些电脑出现故障&#xff0c;总是会导致数据丢失&#xff0c;…

50 代码审计-PHP无框架项目SQL注入挖掘技巧

目录 演示案例:简易SQL注入代码段分析挖掘思路QQ业务图标点亮系统挖掘-数据库监控追踪74CMS人才招聘系统挖掘-2次注入应用功能&#xff08;自带转义)苹果CMS影视建站系统挖掘-数据库监控追踪&#xff08;自带过滤&#xff09; 技巧分析:总结: demo段指的是代码段&#xff0c;先…

C语言从入门到实战——常用内存函数的了解和模拟实现

常用内存函数的了解和实现 前言1. memcpy使用和模拟实现2. memmove使用和模拟实现3. memset函数的使用4. memcmp函数的使用 前言 内存函数&#xff08;memory functions&#xff09;指的是控制计算机内存操作的函数 1. memcpy使用和模拟实现 void * memcpy ( void * destinat…

重生奇迹mu坐骑系统详解

重生奇迹mu最强坐骑排名 1、红色烈焰——炎狼兽。炎狼兽身穿火红色盔甲&#xff0c;远远看去如同一道红色烈焰&#xff0c;非常酷炫&#xff0c;可供多种职业使用&#xff0c;是所有勇士梦寐以求的坐骑。除了可以提高移动速度以外&#xff0c;当年炎狼兽还是勇士们的刷怪利器。…

医院不良事件报告系统源码带鱼骨图分析

医院不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0c;帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件…

紫龙游戏解锁Jira与Perforce的游戏开发行业实践

近日&#xff0c;在龙智携手Atlassian与JFrog共同举办的“大规模开发创新&#xff1a;如何提升企业级开发效率与质量”的线下研讨会中&#xff0c;紫龙游戏上海研发中心高级项目管理主管叶凯威为大家带来了精彩演讲&#xff0c; 分享紫龙游戏的项目管理工具与流程&#xff0c;以…

处理和分析人类语言数据-NLTK安装和使用

简介&#xff1a;NLTK&#xff08;Natural Language Toolkit&#xff09;是一个强大的Python库&#xff0c;用于处理和分析人类语言数据&#xff0c;是一个开源的项目&#xff0c;包含&#xff1a;Python模块&#xff0c;数据集和教程&#xff0c;用于NLP的研究和开发&#xff…

微软推出AI助手Copilot的正式版本;ChatGPT:七位研究人员分享他们的观点

&#x1f989; AI新闻 &#x1f680; 微软推出AI助手Copilot的正式版本 摘要&#xff1a;微软宣布其AI助手Copilot正式上线&#xff0c;此前Copilot的预览版已成为很多用户的日常AI伴侣。此次上线后&#xff0c;Copilot将继续提供AI驱动的网络聊天体验&#xff0c;并具备商业…

SAP_ABAP_内表数据重复问题,解决思路

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读516次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/j…

终端安全管理软件是监控软件吗

有些人在后台问&#xff0c;终端安全管理软件是监控软件吗&#xff1f; 先回答&#xff0c;是监控软件。 因为它具有监控的功能&#xff0c;在很大程度上&#xff0c;是可以用来当做监控软件来用的。 终端安全管理软件是一种集中管理终端设备的软件工具&#xff0c;可以在企业…

Windows下打包C++程序无法执行:无法定位程序输入点于动态链接库

1、问题描述 环境&#xff1a;CLionCMakeMinGW64遇到问题&#xff1a;打包的exe无法运行&#xff0c;提示无法定位程序输入点于动态链接库。 2、解决思路 ​ 通过注释头文件的方式&#xff0c;初步定位问题是因为使用了#include <thread> 多线程库引起的。而且exe文件…

很详细 无人机自主飞行技术的要点与优势

随着无人机自主飞行技术的不断成熟&#xff0c;其在提升巡检效率和减轻工作负担方面正日渐显现为一项强有力的工具。在本文中&#xff0c;我们将共同探讨无人机自主飞行技术的精髓。 一、无人机自主飞行技术的要点 1、 一键式航线规划 为确保无人机在任务中能够安全飞行&…

成人学生钢笔练字快速入门,硬笔书法行书楷书教程合集

一、教程描述 虽然现在都是电脑打字&#xff0c;需要手写的场合越来越少&#xff0c;但是可以写一手人见人爱&#xff0c;花见花开的好字&#xff0c;仍然是很拉风很惊艳的&#xff0c;可以给人留下深刻印象。本套硬笔书法教程&#xff0c;大小40.90G&#xff0c;共有591个文件…

Java参数验证@Validated

就以登录接口为例&#xff0c;如果用户传参的时候没有传递帐号或者密码&#xff0c;会报错&#xff0c;但是报错的信息不够全面&#xff0c;前端人员不好判断是什么问题&#xff0c;这个时候就需要对参数进行一个校验 引入依赖 <dependency><groupId>org.hibernat…

rust入门(rust教程、rust安装方法)

文章目录 Rust开发入门Rust的特性Rust的应用场景Rust安装——环境配置1. 安装rustup具体执行步骤 2. 验证安装 Rust的卸载基本语法变量与数据类型控制流函数 Rust的所有权系统错误处理实战&#xff1a;构建一个小项目创建新项目编写代码运行项目安装相关链接器运行 删除项目 Ru…

vue-cli创建项目运行报错this[kHandle] = new _Hash(algorithm, xofLen);(完美解决)

1&#xff1a;问题出现的原因 出现这个问题是node.js 的版本问题&#xff0c;因为 node.js V17开始版本中发布的是OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制&#xff0c;可能会对生态系统造成一些影响。故此以前的项目在使用 nodejs V17以上版本后会报错。…

【C#】读取ini配置文件的内容

一、编写ini配置文件 ini文件时初始化文件&#xff0c;通常是系统配置文件所采用的存储格式。ini文件有自己的固定格式&#xff0c;是由若干个“节”&#xff08;section&#xff09;组成&#xff0c;每个节由若干个“键”&#xff08;key&#xff09;组成&#xff0c;每个key…