Google的gson.jar包在開發中常常使用,有一些細節的地方稍不注意就會踩到坑。這裏介紹一下使用JsonElement取值所遇到的問題,避免之後再犯這種錯誤。
咱們先看一個例子:api
public static void main(String[] args) { JsonObject js = new JsonObject(); js.addProperty("name", "phone"); js.addProperty("price", 999); js.addProperty("type", "mi"); System.out.println("js-->" + js); String jsStr = js.toString(); System.out.println("str-->" + jsStr); System.out.println("------------------"); if("mi".equals(js.get("type"))){ System.out.println("這是小米手機"); }else{ System.out.println("這不是小米手機"); } if("mi".equals(js.get("type").toString())){ System.out.println("這是小米手機"); }else{ System.out.println("這不是小米手機"); } }
輸出信息以下:spa
js-->{"name":"phone","price":999,"type":"mi"} str-->{"name":"phone","price":999,"type":"mi"} ------------------ 這不是小米手機 這不是小米手機
在JsonObject js裏面,」type」對應的值應該是String類型的」mi」,那麼輸出信息應該是」這是小米手機」。
爲何這裏輸出結果不是咱們預想那樣呢?是否是很奇怪,感興趣的同窗能夠先本身想一想再接着往下看。debug
咱們先把if()裏面的判斷條件打印出來,會看到:調試
JsonElement-->"mi" JsonElement2Str-->"mi"
細心的同窗其實能夠發現js.get(「type」)和type.toString()返回的都是」「mi」「(注意多了一對雙引號),我當時也是經過打斷點一步步調試才發現這個問題。code
難道咱們把if裏面判斷條件也改爲」「mi」「,這樣雖然知足了判斷條件,但老是有點怪怪的感受。
查閱gson的api文檔,會發現JsonElement還有一個getAsString()方法,因而試了一下 js.get(「type」).getAsString(),輸出字符串mi,很明顯這裏是沒有雙引號的。
加上isJsonNull()防止出現null,使程序更健壯。blog
對於int、boolean、long等類型,取值方法也是相似的。以下圖:coffeescript
int prc = ((JsonElement)js.get("price")).isJsonNull()? -1 : js.get("price").getAsInt(); System.out.println(prc); if(prc == 999){ System.out.println("價格只要999"); }else{ System.out.println("價格不是999"); }
例子看起來很簡單,可是實際開發中若是忽視了這些問題,會花費很長時間來debug,因此仍是應該細心一點。ip