Java GSON 解析 JSON 完全指南

devtools/2025/2/12 4:21:28/

1. 简介

GSON(Google JSON)是 Google 提供的用于在 Java 中处理 JSON 数据的库。它允许 Java 对象与 JSON 之间进行序列化和反序列化,支持简单对象、集合、泛型和复杂数据结构的转换。GSON 轻量、高效、易用,是 Java 开发中处理 JSON 的常见选择。

2. 目录

  1. GSON 简介
  2. GSON 安装
  3. 基本用法
    • Java 对象转换为 JSON
    • JSON 转换为 Java 对象
  4. 复杂 JSON 解析
    • 解析 JSON 数组
    • 解析嵌套 JSON
    • 解析泛型对象
  5. 自定义序列化与反序列化
  6. GSON 高级特性
  7. 最佳实践
  8. 总结
  9. 参考资料

3. GSON 安装

Maven 依赖

如果你使用 Maven,可以在 pom.xml 文件中添加:

<dependencies><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.10.1</version></dependency>
</dependencies>
Gradle 依赖
dependencies {implementation 'com.google.code.gson:gson:2.10.1'
}
手动下载

如果不使用构建工具,可以从 GSON 官方 GitHub 下载 .jar 并添加到项目的 lib 目录中。


4. 基本用法

Java 对象转换为 JSON(序列化)
java">import com.google.gson.Gson;class Person {String name;int age;Person(String name, int age) {this.name = name;this.age = age;}
}public class GsonExample {public static void main(String[] args) {Gson gson = new Gson();Person person = new Person("张三", 25);String json = gson.toJson(person);System.out.println(json); // {"name":"张三","age":25}}
}
JSON 转换为 Java 对象(反序列化)
java">import com.google.gson.Gson;public class GsonExample {public static void main(String[] args) {String json = "{\"name\":\"张三\",\"age\":25}";Gson gson = new Gson();Person person = gson.fromJson(json, Person.class);System.out.println(person.name + " - " + person.age);}
}

5. 复杂 JSON 解析

解析 JSON 数组
java">import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;public class GsonArrayExample {public static void main(String[] args) {String json = "[{\"name\":\"张三\",\"age\":25}, {\"name\":\"李四\",\"age\":30}]";Gson gson = new Gson();Type listType = new TypeToken<List<Person>>() {}.getType();List<Person> personList = gson.fromJson(json, listType);for (Person p : personList) {System.out.println(p.name + " - " + p.age);}}
}
解析嵌套 JSON
java">class Address {String city;String country;
}class User {String name;int age;Address address;
}public class GsonNestedExample {public static void main(String[] args) {String json = "{ \"name\": \"张三\", \"age\": 25, \"address\": { \"city\": \"北京\", \"country\": \"中国\" } }";Gson gson = new Gson();User user = gson.fromJson(json, User.class);System.out.println(user.name + " - " + user.address.city);}
}
解析泛型对象
java">class Response<T> {int code;T data;
}public class GsonGenericExample {public static void main(String[] args) {String json = "{ \"code\": 200, \"data\": { \"name\": \"张三\", \"age\": 25 } }";Gson gson = new Gson();Type type = new TypeToken<Response<Person>>() {}.getType();Response<Person> response = gson.fromJson(json, type);System.out.println(response.code + " - " + response.data.name);}
}

6. 自定义序列化与反序列化

有时,我们需要自定义 JSON 的格式。例如,修改日期格式或忽略某些字段。

忽略某些字段
java">import com.google.gson.annotations.Expose;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;class User {@ExposeString name;@Exposeint age;String password;
}public class GsonCustomSerialization {public static void main(String[] args) {User user = new User();user.name = "张三";user.age = 25;user.password = "secret";Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();System.out.println(gson.toJson(user)); // {"name":"张三","age":25}}
}
自定义日期格式
java">import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Date;class Event {String name;Date date;
}public class GsonDateFormatExample {public static void main(String[] args) {Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();Event event = new Event();event.name = "会议";event.date = new Date();String json = gson.toJson(event);System.out.println(json);}
}

7. GSON 高级特性

  • GsonBuilder 配置:可以启用更强大的特性,如 setPrettyPrinting()(美化 JSON)、serializeNulls()(序列化 null 值)。
  • 流式解析:使用 JsonReaderJsonWriter 进行高效的流式 JSON 解析。
  • 自定义类型适配器:可以创建 TypeAdapter<T> 来控制序列化和反序列化过程。

8. 最佳实践

  1. 使用 GsonBuilder 来控制序列化规则(例如忽略 null 值)。
  2. 在复杂数据结构中使用 TypeToken<T> 解析泛型对象。
  3. 使用 @Expose 注解 保护敏感数据,防止某些字段被序列化。
  4. 处理 JSON 异常,避免 JsonSyntaxExceptionNullPointerException
  5. 使用流式解析 处理大规模 JSON 数据,提高性能。

9. 总结

GSON 是 Java 处理 JSON 的强大工具,提供了简单易用的 API 来完成对象与 JSON 之间的转换。本文涵盖了基本使用、复杂解析、自定义序列化、以及最佳实践,希望能帮助你在 Java 项目中高效使用 GSON。


10. 参考资料

  • GSON 官方文档
  • GSON API 参考

http://www.ppmy.cn/devtools/158108.html

相关文章

Java面试题-计算机网络

文章目录 1.介绍一下TCP/IP五层模型&#xff1f;2.**什么是TCP三次握手、四次挥手&#xff1f;**1.三次握手建立连接2.四次握手断开连接 **3.HTTPS和HTTP的区别是什么&#xff1f;**4.**浏览器输入www.taobao.com回车之后发生了什么**&#xff1f;1.URL解析&#xff0c;对URL进…

1.31-子序列问题

Code-1.31-子序列问题 300. 最长递增子序列 题目分析 1. 状态表示 dp[i]表示&#xff1a;以i结尾的所有子序列中&#xff0c;最长递增子序列的长度。 2. 状态转移方程 dp[i] 长度为1 -> 1长度大于1 -> nums[j] < nums[i] -> max(dp[j] 1) 3. 初始化 把表…

aio-pika 快速上手(Python 异步 RabbitMQ 客户端)

目录 简介官方文档如何使用 简介 aio-pika 是一个 Python 异步 RabbitMQ 客户端。5.0.0 以前 aio-pika 基于 pika 进行封装&#xff0c;5.0.0 及以后使用 aiormq 进行封装。 https://github.com/mosquito/aio-pikahttps://pypi.org/project/aio-pika/ pip install aio-pika官…

C#操作excel数据,第一步先保存到Redis,第二步再保存到Sql Server数据库。第三步同步到MongoDB中

以下是一个完整的C#示例,展示如何将Excel数据依次保存到Redis、SQL Server和MongoDB中。代码分为三个步骤,并使用异步编程模型提高性能。 --- ### **实现步骤** 1. **读取Excel数据**:使用 `EPPlus` 库读取Excel文件。 2. **保存到Redis**:使用 `StackExchange.Redis` 将…

C++ 使用CURL开源库实现Http/Https的get/post请求进行字串和文件传输

CURL开源库介绍 CURL 是一个功能强大的开源库&#xff0c;用于在各种平台上进行网络数据传输。它支持众多的网络协议&#xff0c;像 HTTP、HTTPS、FTP、SMTP 等&#xff0c;能让开发者方便地在程序里实现与远程服务器的通信。 CURL 可以在 Windows、Linux、macOS 等多种操作系…

curl与telnet的区别

协议支持&#xff1a;curl支持多种协议&#xff0c;如HTTP、HTTPS、FTP等&#xff0c;而telnet主要用于基于TCP协议的连接。 功能&#xff1a;curl是一个功能强大的工具&#xff0c;可以用来发送各种HTTP请求、下载文件等&#xff0c;而telnet主要用于在远程服务器上进行简单的…

vue3+vite全局loading

vue3vite全局loading j-loading.vue组件 <template><transition enter-active-class"animate__animated animate__fadeIn"leave-active-class"animate__animated animate__fadeOut"><div class"root-box" v-if"show"…

网络通信的精髓:透彻理解 TCP/IP 的三次握手与四次挥手

网络通信的精髓:透彻理解 TCP/IP 的三次握手与四次挥手** 引言 在浩瀚的网络世界中,信息如流水般穿梭于全球各地,支撑着我们日常的在线互动、数据传输和云端服务。而这一切高效、可靠的网络通信,都离不开一个幕后英雄——TCP/IP 协议栈。它犹如网络的“骨架”和“神经系统…