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

JAVA:Gson:序列化和反序列化

        Gson 是 Google 提供的一个用于在 Java 中方便地进行 JSON 与对象互相转换的库。

        Gson 并不是 Android Studio(AS)专用的库,它是一个 通用的 Java JSON 解析库,可以在 任何 Java 项目 中使用。基本用法如下:

1. 把 Java 对象转换为 JSON

目的:将 Java 对象序列化为 JSON 以便存储或传输。

import com.google.gson.Gson;class User {String name;int age;public User(String name, int age) {this.name = name;this.age = age;}
}public class GsonExample {public static void main(String[] args) {Gson gson = new Gson();User user = new User("Alice", 25);// 对象转换为 JSONString json = gson.toJson(user);System.out.println(json); // 输出:{"name":"Alice","age":25}}
}

2. 把 JSON 转换为 Java 对象

目的:解析 JSON 数据并映射到 Java 对象,方便程序处理。

import com.google.gson.Gson;public class GsonExample {public static void main(String[] args) {Gson gson = new Gson();// JSON 字符串String json = "{\"name\":\"Alice\",\"age\":25}";// JSON 转换为对象User user = gson.fromJson(json, User.class);System.out.println("Name: " + user.name); // 输出:Name: AliceSystem.out.println("Age: " + user.age);   // 输出:Age: 25}
}

3. 解析 JSON 数组

目的:处理包含多个对象的 JSON 数据。

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;public class GsonExample {public static void main(String[] args) {Gson gson = new Gson();// JSON 数组String jsonArray = "[{\"name\":\"Alice\",\"age\":25}, {\"name\":\"Bob\",\"age\":30}]";// 解析 JSON 数组Type listType = new TypeToken<List<User>>(){}.getType();List<User> users = gson.fromJson(jsonArray, listType);for (User user : users) {System.out.println("Name: " + user.name + ", Age: " + user.age);}}
}

输出:

Name: Alice, Age: 25
Name: Bob, Age: 30

如果某些字段不想被转换,可以用 @Expose

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;class User {@ExposeString name; // 参与序列化 & 反序列化@Exposeint age; // 参与序列化 & 反序列化@Expose(serialize = false) // 不会出现在 JSON 里(不参与序列化)String password;@Expose(deserialize = false) // JSON 解析时会忽略这个字段(不参与反序列化)String internalId;public User(String name, int age, String password, String internalId) {this.name = name;this.age = age;this.password = password;this.internalId = internalId;}
}public class GsonExposeExample {public static void main(String[] args) {User user = new User("Alice", 25, "secret123", "XYZ987");// Gson 默认不会处理 @Expose,需要用 GsonBuilder 显式启用Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();// 序列化:对象 -> JSONString json = gson.toJson(user);System.out.println("序列化后 JSON: " + json);// 反序列化:JSON -> 对象String jsonString = "{\"name\":\"Bob\",\"age\":30,\"password\":\"hidden\",\"internalId\":\"ABC123\"}";User parsedUser = gson.fromJson(jsonString, User.class);System.out.println("反序列化后对象: Name = " + parsedUser.name + ", Age = " + parsedUser.age + ", Password = " + parsedUser.password + ", InternalId = " + parsedUser.internalId);}
}

默认情况下,Gson 会序列化和反序列化所有字段,但是有时候:

  • 不想把某些字段暴露在 JSON 中(如密码 password、内部 ID internalId)。
  • 你想仅序列化某些字段,而不希望它们在反序列化时被解析。
  • 你想仅反序列化某些字段,而不希望它们在序列化时出现。

这时候,我们可以用 @Expose 进行控制。

相关文章:

JAVA:Gson:序列化和反序列化

Gson 是 Google 提供的一个用于在 Java 中方便地进行 JSON 与对象互相转换的库。 Gson 并不是 Android Studio&#xff08;AS&#xff09;专用的库&#xff0c;它是一个 通用的 Java JSON 解析库&#xff0c;可以在 任何 Java 项目 中使用。基本用法如下&#xff1a; 1. 把 Ja…...

如何在 VS Code 中快速使用 Copilot 来辅助开发

在日常开发中&#xff0c;编写代码往往是最耗时的环节之一。而 GitHub Copilot&#xff0c;作为一款 AI 编码助手&#xff0c;可以帮助开发者 自动补全代码、生成代码片段&#xff0c;甚至直接编写完整的函数&#xff0c;大幅提升编码效率。那么&#xff0c;如何在 VS Code 中快…...

PyCharm 中的 %reset -f 功能:一键重置控制台变量

在 PyCharm 的日常使用中&#xff0c;我们经常需要在控制台中测试和运行各种代码片段。随着时间的推移&#xff0c;控制台中会积累大量的变量和输出&#xff0c;这可能会使得环境变得混乱&#xff0c;影响我们的开发效率。为了解决这个问题&#xff0c;IPython 提供了一个非常有…...

DeepSeek-R1论文阅读及本地调用

前言 DeepSeek已经火了一段时间了&#xff0c;对于这项“国运级”的技术成果&#xff0c;即便研究的不是这个方向&#xff0c;也不免好奇前来看看。本文将先解析一下DeepSeek-R1这篇论文&#xff0c;再对DeepSeek的本地部署使用进行研究配置。 论文标题&#xff1a;DeepSeek-…...

自然语言处理:第九十二章 chatBI 经验(转载)

本人项目地址大全&#xff1a;Victor94-king/NLP__ManVictor: CSDN of ManVictor 原文连接: 一文分享 ChatBI 实践经验 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#x…...

体验用ai做了个python小游戏

体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见&#xff0c;欢迎页面和结束页面背景是视频&#xff0c;游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…...

sql server 从库创建的用户名登录后访问提示数据库无权限

在主副本库创建登录名并且用户映射赋权指定的数据库权限&#xff0c;副副本库也创建登录名&#xff0c;主副本有权限访问数据库的权限&#xff0c;但是副副本没有权限访问数据库。 解决方案&#xff1a; 检查数据库用户是否映射到登录名 如果数据库用户已存在&#xff0c;但…...

懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)

1.合集懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)&#xff1a;https://www.bilibili.com/video/BV1M6rdYEEog/ 备注&#xff1a; 1.本地离线卡密采用最安全的非对称加解密技术&#xff0c;设备id采用最安全多重混合加密不可逆技术生成&…...

Git LFS介绍(Large File Storage)大文件扩展,将大文件存储在外部存储,仓库中只记录文件的元数据(大文件的指针,类似一个小的占位符文件)

文章目录 LFS的功能&#xff1f;如何使用LFS&#xff1f;将大文件存储在外部系统是什么意思&#xff1f;具体是如何运作的&#xff1f;为什么要这样做&#xff1f; 对开发者的影响&#xff1f;1. **性能和效率**2. **协作体验**3. **版本管理差异**4. **额外的工具和配置** LFS…...

前后端项目部署服务器(传统部署和Docker部署)

内外网 开发环境连外网&#xff08;8.140.26.187&#xff09;&#xff0c;测试/生产环境连内网&#xff08;172.20.59.17&#xff09; 内外网地址不同&#xff0c;但指定的库是同一个 内网IP地址范围包括&#xff1a; 10.0.0.0 到 10.255.255.255172.16.0.0 到 172.31.2551…...

python-leetcode 39.二叉树的直径

题目&#xff1a; 给定一棵二叉树的根节点&#xff0c;返回该树的直径。 二叉树的直径是指中间任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点root 两节点之间路径的长度由他们之间的边数表示 方法一&#xff1a;深度优先搜索 一条路径的长度为该路…...

Webpack的持久化缓存机制具体是如何实现的?

Webpack 的持久化缓存机制是 Webpack 5 引入的一项重要特性&#xff0c;旨在提高构建速度和性能。通过将构建结果缓存到磁盘上&#xff0c;Webpack 可以在后续构建中重用先前的结果&#xff0c;减少不必要的重新计算。以下是持久化缓存机制的具体实现和工作原理。 一、持久化缓…...

开题报告——基于Spring Boot的垃圾分类预约回收系统

关于本科毕业设计(论文)开题报告的规定 为切实做好本科毕业设计(论文)的开题报告工作,保证论文质量,特作如下规定: 一、开题报告是本科毕业设计(论文)的必经过程,所有本科生在写作毕业设计(论文)之前都必须作开题报告。 二、开题报告主要检验学生对专业知识的驾驭能…...

【分布式理论11】分布式协同之分布式事务(一个应用操作多个资源):从刚性事务到柔性事务的演进

文章目录 一. 什么是分布式事务&#xff1f;二. 分布式事务的挑战三. 事务的ACID特性四. CAP理论与BASE理论1. CAP理论1.1. 三大特性1.2. 三者不能兼得 2. BASE理论 五. 分布式事务解决方案1. 两阶段提交&#xff08;2PC&#xff09;2. TCC&#xff08;Try-Confirm-Cancel&…...

配置Api自动生成

我的飞书:https://rvg7rs2jk1g.feishu.cn/docx/TVlJdMgYLoDJrsxAwMgcCE14nxt 使用Springfox Swagger生成API&#xff0c;并导入Postman&#xff0c;完成API单元测试 Swagger: 是一套API定义的规范&#xff0c;按照这套规范的要求去定义接口及接口相关信息&#xff0c;再通过可…...

适用于复杂背景的YOLOv8改进:基于DCN的特征提取能力提升研究

文章目录 1. YOLOv8的性能瓶颈与改进需求1.1 YOLOv8的优势与局限性1.2 可变形卷积&#xff08;DCN&#xff09;的优势 2. DCN在YOLOv8中的应用2.1 DCN的演变与YOLOv8的结合2.2 将DCN嵌入YOLOv8的结构中2.2.1 DCNv1在YOLOv8中的应用2.2.2 DCNv2与DCNv3的优化 2.3 实验与性能对比…...

Redis_基础

Redis 命令启动、配置密码 Redis是绿色软件&#xff0c;所以直接解压就能使用 配置文件为&#xff1a;redis.windows.conf 启动redis 服务&#xff1a; redis-server.exe redis.windows.conf启动客户端&#xff1a; redis-cli.exe默认没有给Redis配置密码&#xff0c;所以在…...

linux查看程序占用的本地端口

ss是Socket Statistics的缩写&#xff0c;用来替代旧的netstat工具&#xff0c;功能更强大&#xff0c;执行更快。它用于查看系统的网络连接情况&#xff0c;包括TCP、UDP等协议的信息。 一. 命令解析&#xff1a; sudo ss -tulwnpss (Socket Statistics)&#xff1a;替代 ne…...

Linux阿里云服务器安装RocketMQ教程

本文为个人云服务器上搭建RocketMQ教程&#xff0c;用于帮助大家降低安装学习成本&#xff0c;提高学习效率。本人在服务器上&#xff08;我用的是阿里云服务器&#xff09;安装MQ时遇到了大大小小的问题&#xff0c;因此在最终完成部署后&#xff0c;希望能总结一个教程&#…...

【JavaEE进阶】MyBatis入门

目录 &#x1f334;前言 &#x1f332;什么是MyBatis? &#x1f333;准备工作 &#x1f6a9;创建工程 &#x1f6a9;配置数据库连接字符串 &#x1f6a9;数据准备 &#x1f6a9;编写持久层代码 &#x1f343;单元测试 &#x1f334;前言 在应⽤分层学习时,我们了解到…...

Docker 镜像加速器配置指南

Docker 镜像加速器配置指南 2025-02-17 23:00 Linux : Aliyun ECS 服务器 背景问题 在国内&#xff0c;由于网络环境的不稳定&#xff0c;直接从 Docker Hub 拉取镜像的速度可能会很慢&#xff0c;有时甚至会失败。即使配置了官方的阿里云镜像加速器&#xff0c;也可能因为…...

LeetCode-524. 通过删除字母匹配到字典里最长单词

1、题目描述&#xff1a; 给你一个字符串 s 和一个字符串数组 dictionary &#xff0c;找出并返回 dictionary 中最长的字符串&#xff0c;该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个&#xff0c;返回长度最长且字母序最小的字符串。如果答案不存在&#x…...

工作-述职笔记

文章目录 述职报告量化指标比较好的想法角色的基本要求项目不好做?减少人员介入的内容知识库 wiki 博客等(公司不一定允许) 点评培训的重要性 很少写关于工作的笔记&#xff0c;但是接触的东西越多&#xff0c;发现有很多知识点以及需要学习的内容。 所以整理下吧。 述职不是小…...

前端VUE+后端uwsgi 环境搭建

1整体架构 请求流程the web clinet--the web server->the socket->uwsgi--django 第一级的nginx并不是必须的&#xff0c;uwsgi完全可以完成整个的和浏览器交互的流程&#xff1b;在nginx上加上安全性或其他的限制&#xff0c;可以达到保护程序的作用&#xff1b;uWSGI本…...

2025软件测试面试题大全(78题含答案解析)

1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 参考答案&#xff1a; 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行&#xff0c;即是通常说的软件的可移植性。 兼容的类型&#xff0c;如果细分的话&#xff0c;有平台的兼容…...

微信小程序地图map全方位解析

微信小程序地图map全方位解析 微信小程序的 <map> 组件是一个功能强大的工具&#xff0c;可以实现地图展示、定位、标注、路径规划等多种功能。以下是全方位解析微信小程序地图组件的知识点&#xff1a; 一、地图组件基础 1. 引入 <map> 组件 在页面的 .wxml 文…...

【Bert】自然语言(Language Model)入门之---Bert

every blog every motto: Although the world is full of suffering&#xff0c; it is full also of the overcoming of it 0. 前言 对bert进行梳理 论文&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 时间&#xff1a;…...

实时股票行情接口与WebSocket行情接口的应用

实时股票行情接口与WebSocket行情接口的应用 实时股票行情接口是量化交易和投资决策的核心工具之一&#xff0c;行情接口的种类和功能也在不断扩展。介绍几种常见的行情接口&#xff0c;包括实时股票行情接口、Level2行情接口、WebSocket行情接口以及量化行情接口&#xff0c;…...

.NET版PDF处理控件Aspose.PDF教程:在 C# 中将 TIFF 文件转换为 PDF

将TIFF文件转换为PDF文档在各个行业中都是必不可少的。许多企业需要将文档转换为存档、共享或打印。TIFF 文件通常用于图像&#xff0c;而 PDF 是文档共享的标准。将 TIFF 文件转换为 PDF 可确保跨不同平台的兼容性和易用性。在这篇博文中&#xff0c;我们将探讨如何使用 Aspos…...

本地搭建小型 DeepSeek 并进行微调

本文将指导您在本地搭建一个小型的 DeepSeek 模型,并进行微调,以处理您的特定数据。 1. 环境准备 Python 3.7 或更高版本 PyTorch 1.8 或更高版本 CUDA (可选,用于 GPU 加速) Git 2. 克隆 DeepSeek 仓库 bash 复制 git clone https://github.com/deepseek-ai/deepseek.g…...