迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

Gson — 如何对 Null 值进行映射

作者:迹忆客 最近更新:2022/06/10 浏览次数:

在我们为数不多的 Gson 文章中,我们介绍了 Gson 是什么以及它如何将各种 JSON 数据结构映射到 Java 对象,反之亦然。 当然,还有很多问题没有得到解答。 在这篇文章中,我们将回答最有趣的问题之一。 如果想知道 Gson 如何处理 Null 值,请继续阅读下面的内容!


Null 会发生什么?

我们假设大家已经阅读了我们的第一篇 Gson 文章,其中介绍了 UserSimple 类及其字段。 在我们之前的演示中,始终设置所有值。 如果其中的一个字段的值为 null,会发生什么? 例如,我们正在创建一个用户,该用户具有 emailage 并且是开发人员,但 name 为空?

UserSimple userObject = new UserSimple(null, "jiyik_onmpw@163.com", 26, true); 

这是有效的 Java 代码,会生成一个常规的 UserSimple 对象。 如果我们现在让 Gson 创建一个匹配的 JSON,它会是什么样子?

UserSimple userObject = new UserSimple(null, "jiyik_onmpw@163.com", 26, true);

Gson gson = new Gson();  
String userJson = gson.toJson(userObject); // userJson = ??  

Gson 将创建以下 JSON:

{
  "age": 26,
  "email": "jiyik_onmpw@163.com",
  "isDeveloper": true
}

Gson 在序列化过程中只是忽略空值! 如果未设置值,则它根本不会成为结果 JSON 的一部分。 如果我们要求具有 null 值的字段也显示在 JSON 中(具有空值),Gson 有一个选项。 但我们稍后再看。

现在,重要的是您要了解在序列化期间,Gson 不会为空值创建 JSON 值。

反序列化的工作方式非常相似。 假设我们有以下 JSON,它没有了 email

{
  "age": 26,
  "isDeveloper": true,
  "name": "jiyik"
}

即使没有 email ,Gson 仍会尝试尽可能多地进行映射。 对于所有不存在的字段,它将保留 Java 对象值 null:

Gson 反序列化空值

当然,如果字段是像String这样的可以为 null 的类型,设置为null很容易,但是如果不设置不可空类型呢? 例如,想象以下 JSON:

{
  "email": "jiyik_onmpw@163.com",
  "name": "jiyik"
}

age(作为 int 类型)和 isDeveloper(作为 boolean 类型)都不接受 null 值。 在这种情况下,Gson 仍然不会出错,只使用它们的默认值(分别为 0 和 false):

Gson 映射 不可为 Null 的值

在这篇文章中,我们了解了 Gson 如何处理 null 值。 在未设置值时检查模型和业务逻辑是否存在可能的错误非常重要!

除非注明转载,本站文章均为原创或翻译,欢迎转载,转载请以链接形式注明出处

本文地址:

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

热门文章

教程更新

热门标签

扫码一下
查看教程更方便