我想一個primitve財產從一個JSONObject的複製到另一個無法施展JsonNull到JSONObject的
JsonObject propertyToBeCopied = source.getAsJsonObject(propertyName);
,但我總是遇到這樣的例外:
com.google.gson.JsonNull cannot be cast to com.google.gson.JsonObject
根據文件應該可以做演員,還是我錯了?
我想一個primitve財產從一個JSONObject的複製到另一個無法施展JsonNull到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;
}
將返回澆鑄到JsonObject
如果是類型JsonNull
的不是JsonElement
。
按照API reference,JsonNull
從JsonElement
和不JsonObject
派生,所以我看不出怎麼說劇組可以永遠有效。
你有沒有考慮用json-simple而不是gson?作爲一般規則,我發現與其他json框架一起工作要方便得多,當然它並沒有很多gson提供的額外功能。但是,如果你用gson做的所有事情都是解析json,那麼切換到更簡單的庫可能是值得的。
JsonElement element = source.get(propertyName);
if (!(element.isJsonNull())) {
JsonObject propertyToBeCopied = (JsonObject) element;
}
哪一個會有更好的表現isJsonNull或使用}這種操作?
謝謝。 iam現在使用: 'destination.add(「attribute」,source.get(「attribute」));' – gosua
有一點需要注意 - 您必須在instanceof支票或!不會編譯。 if(!(element instanceof JsonNull))... – DiscDev
對,我會更新我的答案 – Pao