我想将一个primitve属性从一个JsonObject复制到另一个
JsonObject propertyToBeCopied = source.getAsJsonObject(propertyName);
但我总是遇到这个例外:
com.google.gson.JsonNull cannot be cast to com.google.gson.JsonObject
根据文件,应该可以进行演员表,或者我错了吗?
答案 0 :(得分:13)
根据docs JsonNull
,JsonElement
是JsonObject
,而不是JsonElement
(本身就是JsonElement element = source.get(propertyName);
if (!(element instanceof JsonNull)) {
JsonObject propertyToBeCopied = (JsonObject) element;
}
)。使用
JsonElement
如果<{1}}不属于JsonObject
,则会返回JsonNull
{{1}}。
答案 1 :(得分:2)
根据API reference,JsonNull
来自JsonElement
而不 JsonObject
,所以我看不出那个演员怎么会有效。
您是否考虑使用json-simple代替gson?作为一般规则,我发现使用它比其他json框架更方便,虽然它当然没有gson提供的许多额外功能。但是,如果您正在使用gson进行解析json,则可能需要切换到更简单的库。
答案 2 :(得分:1)
JsonElement element = source.get(propertyName);
if (!(element.isJsonNull())) {
JsonObject propertyToBeCopied = (JsonObject) element;
}
哪一个具有更好的性能 isJsonNull 或使用 instanceOf 运算符?
答案 3 :(得分:0)
如果输出没有Response数组,则有可能引发此错误。
JsonObject playListObject = (JsonObject) parser.parse(output);
JsonArray playListInformationArray = playListObject.getAsJsonArray("Response");