10

我想将一个原始属性从一个 JsonObject 复制到另一个

JsonObject propertyToBeCopied = source.getAsJsonObject(propertyName);

但我总是遇到这个异常:

com.google.gson.JsonNull cannot be cast to com.google.gson.JsonObject

根据文档,应该可以进行演员表,还是我错了?

4

4 回答 4

22

根据文档JsonNull是 aJsonElement但不是 a JsonObject(它本身就是 a JsonElement)。使用

JsonElement element = source.get(propertyName);
if (!(element instanceof JsonNull)) {
    JsonObject propertyToBeCopied = (JsonObject) element;
}

如果它不是 type ,将返回一个JsonElement被强制转换为的 a 。JsonObjectJsonNull

于 2012-09-11T23:57:50.520 回答
2

根据API 参考JsonNull派生自JsonElement JsonObject,所以我看不出该转换如何有效。

您是否考虑过使用json-simple代替 gson?作为一般规则,我发现它比其他 json 框架更方便,尽管它当然没有 gson 提供的很多额外功能。但是,如果您使用 gson 所做的只是解析 json,则可能值得切换到更简单的库。

于 2012-09-11T23:50:36.147 回答
2
JsonElement element = source.get(propertyName);
if (!(element.isJsonNull())) {
    JsonObject propertyToBeCopied = (JsonObject) element;
}

哪一个将具有更好的性能isJsonNull或使用instanceOf运算符?

于 2016-07-26T03:52:33.363 回答
0

如果输出没有响应数组,则有可能引发此错误。

JsonObject playListObject = (JsonObject) parser.parse(output);

JsonArray playListInformationArray = playListObject.getAsJsonArray("Response");
于 2019-11-13T20:58:07.643 回答