【发布时间】:2012-09-11 23:42:57
【问题描述】:
我想将一个原始属性从一个 JsonObject 复制到另一个
JsonObject propertyToBeCopied = source.getAsJsonObject(propertyName);
但我总是遇到这个异常:
com.google.gson.JsonNull cannot be cast to com.google.gson.JsonObject
根据文档,应该可以进行演员表,还是我错了?
【问题讨论】:
我想将一个原始属性从一个 JsonObject 复制到另一个
JsonObject propertyToBeCopied = source.getAsJsonObject(propertyName);
但我总是遇到这个异常:
com.google.gson.JsonNull cannot be cast to com.google.gson.JsonObject
根据文档,应该可以进行演员表,还是我错了?
【问题讨论】:
根据docsJsonNull 是JsonElement 但不是JsonObject(它本身就是JsonElement)。使用
JsonElement element = source.get(propertyName);
if (!(element instanceof JsonNull)) {
JsonObject propertyToBeCopied = (JsonObject) element;
}
如果不是 JsonNull 类型,则将返回一个转换为 JsonObject 的 JsonElement。
【讨论】:
destination.add("attribute", source.get("attribute"));
JsonElement element = source.get(propertyName);
if (!(element.isJsonNull())) {
JsonObject propertyToBeCopied = (JsonObject) element;
}
isJsonNull 或使用 instanceOf 运算符,哪一个会有更好的性能?
【讨论】:
根据API reference,JsonNull 派生自JsonElement 和不是 JsonObject,所以我看不出该演员阵容如何有效。
您是否考虑过使用json-simple 代替gson?作为一般规则,我发现它比其他 json 框架更方便,尽管它当然没有 gson 提供的很多额外功能。但是,如果您使用 gson 所做的只是解析 json,则可能值得切换到更简单的库。
【讨论】:
如果输出没有响应数组,那么有可能会引发此错误。
JsonObject playListObject = (JsonObject) parser.parse(output);
JsonArray playListInformationArray = playListObject.getAsJsonArray("Response");
【讨论】: