文档中说如果不存在这样的成员,JsonObject#get方法返回null。有时会返回JsonNull
对象而不是null
。
检查GSON中是否存在某个字段的习惯用法是什么?我希望避免这种笨拙的风格:
jsonElement = jsonObject.get("optional_field");
if (jsonElement != null && !jsonElement.isJsonNull()) {
s = jsonElement .getAsString();
}
为什么GSON使用JsonNull
而不是null
?
有一个答案what是null
和JsonNull
之间的差异。在我的问题上面,我寻找的原因。
2条答案
按热度按时间xoshrz7s1#
Gson大概是想对JSON中缺少值和存在JSON value
null
之间的区别进行建模。您的应用程序可能会认为它们是相同的,但JSON格式却不会。
正在呼叫
返回Java值
null
,因为不存在具有该名称的成员。正在呼叫
会传回
JsonNull
型别(JsonNull.INSTANCE
所指涉的单一)的执行严修,因为确实存在具有该名称的成员,而且其值为JSON null,由JsonNull
值表示。voase2hg2#
我知道这个问题并不是在要求一个解决方案,但我来这里是为了寻找一个解决方案。所以我会把它贴出来,以防别人需要它。
下面的Kotlin扩展代码省去了为每个元素分别检查
null
和isJsonNull
的麻烦而不是像这样打电话
你这样打电话
在嵌套结构中工作得特别好。