文档说JsonObject#get方法如果不存在则返回null。那不准确;有时会返回JsonNull对象,而不是null

检查GSON中是否存在特定字段的惯用法是什么?我希望避免这种笨拙的风格:

jsonElement = jsonObject.get("optional_field");
if (jsonElement != null && !jsonElement.isJsonNull()) {
    s = jsonElement .getAsString();
}

为什么GSON使用JsonNull而不是null

what的答案是nullJsonNull之间的区别。在上面的问题中,我正在寻找原因。

最佳答案

大概,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/

10-10 11:56