文档说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
之间的区别。在上面的问题中,我正在寻找原因。 最佳答案
大概,Gson想对JSON中不存在值和JSON value null
存在之间的差异进行建模。例如,这两个JSON代码段之间存在差异
{}
{"key":null}
您的应用程序可能会认为它们相同,但JSON格式却不同。
呼唤
JsonObject jsonObject = new JsonObject(); // {}
jsonObject.get("key");
返回Java值
null
,因为不存在具有该名称的成员。呼唤
JsonObject jsonObject = new JsonObject();
jsonObject.add("key", JsonNull.INSTANCE /* or even null */); // {"key":null}
jsonObject.get("key");
返回类型为
JsonNull
(由JsonNull.INSTANCE
引用的单例)的实例,因为确实存在具有该名称的成员,并且其值是JSON null,由JsonNull
值表示。关于java - 为什么在GSON中使用JsonNull?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39114293/