Java Gson 实现 Json 数据的生成与解析
前言
Json 作为一种简单便捷的数据格式,可以被各种语言默认或者以插件支持。
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
Gson
项目地址
- github: google/gson 。
说明
-
Gson是一个Java库,可用于将Java对象转换为其JSON表示形式。它还可以用于将JSON字符串转换为等效的Java对象。Gson可以处理任意Java对象,包括您没有源代码的现有对象。
有一些开源项目可以将Java对象转换为JSON。但是,大多数方法都要求您在类中放置Java批注。如果您无法访问源代码,则无法执行某些操作。大多数还不完全支持Java泛型的使用。Gson认为这两个都是非常重要的设计目标。
功能
- 提供简单的
toJson()
和fromJson()
方法,将Java对象到JSON,反之亦然 - 允许将现有的不可修改对象与JSON相互转换
- Java泛型的广泛支持
- 允许对象的自定义表示
- 支持任意复杂的对象(具有深层继承层次结构和泛型类型的广泛使用)
导入
-
这里只记录 Gradle 的导入方式,更多方式请看 github 项目说明。
目前版本为:2.8.6 。
复制
dependencies { implementation 'com.google.code.gson:gson:2.8.6' }
示例
类
-
使用 Gson 你应先创建一个 JSON 对应的 Java 类。
示例:
复制
public class JsonFromGson { private String name; private String password; public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public String getPassword() { return password; } }
方法
- Gson 主要包含两个常用的方法:
toJson()
和fromJson()
。
toJson()
-
现有一个
JsonFromGson
类的对象,要转化为一个符合JsonFromGson
类的 Json 字符串,示例:复制
Gson gson = new Gson(); JsonFromGson jsonFromGson = new JsonFromGson(); jsonFromGson.setName("yogile"); jsonFromGson.setPassword("yogilepwd"); String getGson = gson.toJson(jsonFromGson); System.out.println(getGson);
-
输出显示:
复制
{"name":"yogile","password":"yogilepwd"}
fromJson()
-
现有一个符合
JsonFromGson
类的 Json 字符串,要转化为一个JsonFromGson
类的对象,示例:复制
Gson gson = new Gson(); String strGson = "{\"name\":\"yogile\",\"password\":\"yogilepwd\"}"; JsonFromGson jsonFromGson = new JsonFromGson(); jsonFromGson = gson.fromJson(strGson, JsonFromGson.class); System.out.println("name: " + jsonFromGson.getName() + "\npassword: " + jsonFromGson.getPassword());
-
输出显示:
复制
name: yogile password: yogilepwd
作者:Yogile
出处:https://www.cnblogs.com/Yogile/p/13278474.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构