Gson教程六(译):空值的映射
程序员文章站
2024-03-16 09:09:46
...
值为空时将会发生什么?
我们假设你已经阅读了我们关于Gson的首篇博客,里面介绍了UserSimple类以及它的成员变量。在我们之前的例子中,所有的值都设置了。如果某个值为空将会发生什么?例如,我们创建了一个user,他拥有邮件,年龄而且是一名开发者,但是名字为空。
UserSimple userObject = new UserSimple(null, "[email protected]", 26, true);
- 1
- 2
这行Java代码是有效的,它的结果是一个常规的UserSimple对象。如果我们现在使用Gson创建它的JSON,它看起来会怎么样呢?
UserSimple userObject = new UserSimple(null, "[email protected]", 26, true);
Gson gson = new Gson();
String userJson = gson.toJson(userObject); // userJson = ??
- 1
- 2
- 3
- 4
- 5
Gson将会创建如下JSON:
{
"age": 26,
"email": "[email protected]",
"isDeveloper": true
}
- 1
- 2
- 3
- 4
- 5
- 6
Gson在序列化的时候会简单的忽视空值!如果一个值没有设置,那么它就不会存在JSON结果中。如果你需要使该空值依然出现在你的JSON中(以null代替),Gson有提供方法。但我们最好在后面探讨这一点。
现在最重要的是使你明白在序列化时,Gson并没有为JSON创建空值。
反序列化时类似的。假设有如下缺少email的JSON:
{
"age": 26,
"isDeveloper": true,
"name": "Norman"
}
尽管email缺失了,Gson依然会尽量映射准确。它会使所有不存在的域的Java对象都置空:
当然,将一个可为空的成员变量(如String类型)设为空是容易的,但是,如何设置一个不能置空的类型呢?例如,想象有如下JSON:
{
"email": "[email protected]",
"name": "Norman"
}
age(int类型)和isDeveloper(boolean类型)并不接受空值。在这种情况下,Gson也不会出错,它会使用它们的默认值(分别为0和false)