2012-09-11 74 views
3

我想一個primitve財產從一個JSONObject的複製到另一個無法施展JsonNull到JSONObject的

JsonObject propertyToBeCopied = source.getAsJsonObject(propertyName);

,但我總是遇到這樣的例外:

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

根據文件應該可以做演員,還是我錯了?

回答

9

按照docsJsonNullJsonElement但不是JsonObject(其本身是一個JsonElement)。使用

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

將返回澆鑄到JsonObject如果是類型JsonNull的不是JsonElement

+0

謝謝。 iam現在使用: 'destination.add(「attribute」,source.get(「attribute」));' – gosua

+0

有一點需要注意 - 您必須在instanceof支票或!不會編譯。 if(!(element instanceof JsonNull))... – DiscDev

+0

對,我會更新我的答案 – Pao

2

按照API referenceJsonNullJsonElementJsonObject派生,所以我看不出怎麼說劇組可以永遠有效。

你有沒有考慮用json-simple而不是gson?作爲一般規則,我發現與其他json框架一起工作要方便得多,當然它並沒有很多gson提供的額外功能。但是,如果你用gson做的所有事情都是解析json,那麼切換到更簡單的庫可能是值得的。

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

哪一個會有更好的表現isJsonNull或使用}這種操作?

相關問題