使用Gson中的JsonElement所遇到的坑

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,很明顯這裏是沒有雙引號的。
getAsString
加上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");
        }

getAsInt

例子看起來很簡單,可是實際開發中若是忽視了這些問題,會花費很長時間來debug,因此仍是應該細心一點。ip

相關文章
相關標籤/搜索