我想一个primitve属性复制从一个JSONObject的另一
JsonObject propertyToBeCopied = source.getAsJsonObject(propertyName);
但我总是遇到这样的例外:
com.google.gson.JsonNull cannot be cast to com.google.gson.JsonObject
根据该文件,应该可以做演员,还是我错了?
我想一个primitve属性复制从一个JSONObject的另一
JsonObject propertyToBeCopied = source.getAsJsonObject(propertyName);
但我总是遇到这样的例外:
com.google.gson.JsonNull cannot be cast to com.google.gson.JsonObject
根据该文件,应该可以做演员,还是我错了?
根据该文档 JsonNull
是JsonElement
但不是JsonObject
(这本身就是一个JsonElement
)。 运用
JsonElement element = source.get(propertyName);
if (!(element instanceof JsonNull)) {
JsonObject propertyToBeCopied = (JsonObject) element;
}
将返回JsonElement
被强制转换为JsonObject
,如果它的类型是不JsonNull
。
按照API参考 , JsonNull
派生自JsonElement
而不是 JsonObject
,所以我没有看到如何剧组可以永远有效。
而你考虑使用JSON的简单 ,而不是GSON? 作为一般规则,我觉得它更方便,比其他JSON框架工作,尽管当然它没有很多的GSON提供了额外的功能。 但是,如果你正在使用GSON做的是解析JSON,它可能是值得切换到简单的库。
JsonElement element = source.get(propertyName);
if (!(element.isJsonNull())) {
JsonObject propertyToBeCopied = (JsonObject) element;
}
哪一个会有更好的表现isJsonNull或使用instanceof运算符?