Gson - 检查节点/元素存在的正确方法

Thu*_*inh 3 java parsing android json gson

当我有一个JsonObject,为了从中检索一个指定的元素成员,会有几个方法,例如,get()和其他getAsXXX():

JsonPrimitive childNode1 = parent.getAsJsonPrimitive("key1);
JsonArray childNode2 = parent.getAsJsonArray("key2);
JsonElement childNode3 = parent.get("key3);
Run Code Online (Sandbox Code Playgroud)

我的问题是,isJsonNull()检查元素是否存在的方法是什么?我对Json的文档感到有些困惑.

小智 6

您可以使用JsonObject.has()来确定元素是否存在,http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html

  • 链接已经死了.https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonObject.java#L141 (3认同)

GrI*_*sHu 6

根据文档JsonNull是一个JsonElement但不是一个JsonObject(它本身就是一个JsonElement).运用

JsonElement element = source.get(propertyName);
if (!(element instanceof JsonNull)) {
    JsonObject propertyToBeCopied = (JsonObject) element;
}
Run Code Online (Sandbox Code Playgroud)

如果它不属于类型JsonElement,则会返回一个被转换JsonObject的内容JsonNull.

null引用不是一个JsonNull值.(value == null)是不一样的value.isJsonNull().他们是非常不同的.

文档描述了对JsonObject.get(String)返回的调用"null if no such member exists."他们没有说JsonNull返回.

调用JsonElement.isJsonNull()不会检查JsonElement引用是否为null引用.事实上,如果它是一个null引用,在它上面调用一个方法会抛出一个NullPointerException.它正在检查它是否是一个JsonNull实例.