10

1 つのプリミティブ プロパティをある JsonObject から別の JsonObject にコピーしたい

JsonObject propertyToBeCopied = source.getAsJsonObject(propertyName);

しかし、私は常にこの例外に遭遇します:

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

ドキュメントによると、キャストを実行できるはずですか、それとも間違っていますか?

4

4 に答える 4

22

ドキュメントによるとJsonNulla ですが、a ではJsonElementありませんJsonObject(それ自体は aJsonElementです)。使用する

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

タイプが でない場合、JsonElementキャストされた a を返します。JsonObjectJsonNull

于 2012-09-11T23:57:50.520 に答える
2
JsonElement element = source.get(propertyName);
if (!(element.isJsonNull())) {
    JsonObject propertyToBeCopied = (JsonObject) element;
}

isJsonNullとinstanceOf operator のどちらを使用すると、パフォーマンスが向上しますか?

于 2016-07-26T03:52:33.363 に答える
2

API リファレンスによると、JsonNullは から派生しJsonElement、 ではない JsonObjectため、そのキャストがどのように有効になるかわかりません。

また、gson の代わりにjson-simpleを使用することを検討しましたか? 原則として、他の json フレームワークよりも使いやすいと思いますが、もちろん gson が提供する多くの追加機能はありません。しかし、gson で行っているのが json の解析だけである場合は、より単純なライブラリに切り替える価値があるかもしれません。

于 2012-09-11T23:50:36.147 に答える