千家信息网

Gson有哪些特性

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"Gson有哪些特性",在日常操作中,相信很多人在Gson有哪些特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Gson有哪些特性"的疑惑有所帮助!接
千家信息网最后更新 2026年11月03日Gson有哪些特性

这篇文章主要介绍"Gson有哪些特性",在日常操作中,相信很多人在Gson有哪些特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Gson有哪些特性"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

从一个 Bug 说起

不知道你们发现没有,你写完的程序无论当时怎么测试,过一段时间总会出 Bug 。再说一个每天都在发生的例子:在你写完一篇博客后,立即检查的话,总是查不出自己写的错别字。

据说这些都包含有一些大脑对当下事物处理的逻辑在里边,而且还有心理学因素在里边,我也不懂。反正现在就是程序出 Bug 了!出 Bug 了!!Bug !!!

事情是这样的,客户端请求服务器开放接口时,我们是以 JSON 字符串的形式返回的,这时候本来正常返回形式是这样:

{
"name": "mafly",
"age": "18",
"sex": "男"
}

但这个名字叫Mafly的人他不想让你知道他是男是女。就没填性别,程序中默认赋值为 null了,JSON 序列化时就发生了意想不到的事儿。

重现一下那个 Bug

用于转换Java对象为 Json 字符串和把 Json 字符串转换为对象的工具类有很多,Gson、Jackson、FastJson等,我们用的是 Gson, 它是 Google 开发的,还据传说它的性能比较强大一些。嗯,对,我们用的就是这个。先看示例代码:

public static void main(String[] args) {

HashMap map = new HashMap();
map.put("name", "mafly");
map.put("age", "18");
map.put("sex", null);

String jsonString = new Gson().toJson(map);
System.err.println(jsonString);
}

你猜会输出上面那段我们预期的 Json 串吗?然而并不会。

就是这个当 Sex=null时,用 Gson 的tojson方法会把 null 值忽略,从而序列化之后输出不包含这个属性值的 Json 串。其实我们的预期是输出 {"sex": ""} 或 {"sex": null}, 那怎么做呢?

通过搜索引擎发现,网上大概存在以下三种解决方案:

  • 调用 toJson(Object src, Type typeOfSrc, JsonWriter writer) 方法

  • 注册自定义 TypeAdapter

  • 设置 serializeNulls 属性值(推荐)

前两种方式我没测试,推荐第三种方式,简单方便,源码如下:

GsonBuilder gsonBuilder = new GsonBuilder();
String jsonString1 = gsonBuilder.serializeNulls().create().toJson(map);
System.err.println(jsonString1);

输出符合我们的需求了, {"sex": null},如图:

简单转到源码看了看,除了这一个设置还有很多,真是太方便了。调用serializeNulls()后, Gson 设置 serializeNulls 属性值为 true,默认是false,源码:

public GsonBuilder serializeNulls() {
this.serializeNulls = true;
return this;
}

重新认识一下 Gson

我看了几行 Gson 的源码后,我发现它可配置及特性多的数不胜数,可以用@SerializedName注解给属性重命名,用@Expose注解标识属性不进行序列化,支持 Map 的 key 为复杂对象的形式,日期类型转化为特定格式,还有区分版本进行显示,这些在日常项目中都极常用到,只不过好像我们之前都是自己实现的。

我简单建立了一个 UserInfo 实体类,里边包含了username、age、sex这三个属性值。试着测试了一下其中一两个:

1.@Expose 想让谁输出谁输出,注解代码如图:

设置excludeFieldsWithoutExposeAnnotation(),看下面第三行是输出:

2.@SerializedName 想怎么显示怎么显示,注解代码如图:

我想把age再 Json序列化时显示maflyAge,现在就可以了,输出如下图:

3.@Since、@Until 不同版本不同数据,注解代码如图:

这里要设置setVersion(3.2),@Since标注的在 3.2 版本或之后才会输出,@Until标注的只在 3.2 版本前才有。效果输出如下图:

当然,还有好多特性呢,比如字段首字母大写阿、结果格式化阿等等,我这里抛个砖,剩下的有需要的可以试试。

到此,关于"Gson有哪些特性"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

输出 特性 属性 注解 代码 序列 源码 版本 如图 学习 字符 字符串 对象 就是 形式 方法 程序 测试 不同 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 中关村互联网 科技集团 互联网科技巨头监管 互联网科技保险 合肥互联网科技公司 广州紫鲸互联网科技 掌上梦互联网科技 佩信高科技互联网 恒银科技与互联网金融 北京华百购互联网科技有限公司 承德科技产业互联网发展 茂名市互联网科技产业园 阿大互联网科技有限公司 如何创新互联网科技 上海京穆互联网科技有限公司 云南省自由互联网科技有限公司 富国互联网金融科技混合基金 互联网科技包装股份有限公司上市 长沙易易互联网科技有限公司 互联网科技自媒体灵感 广州互联网科技公司 壹账通互联网科技 菲比寻常互联网科技 深圳艾佳互联网科技 无锡溥仪互联网科技有限公司 太原新华互联网科技学校怎么样 上海宁丞科技互联网 浙南科技城互联网大厦建设工程 山东有哪些互联网科技公司 福仕德教育科技互联网
0