天天看點

Gson的使用第一步 下載下傳第二步 生成gson.jar 包第三步 使用

之前的一篇文章。寫了如何使用android自帶的json解析庫來解析使用json資料。下面我們來看另一個很好的json解析庫。這個解析庫是google開源的。他就是Gson

Gson 是 Google 提供的用來在 Java 對象和 JSON 資料之間進行轉換的 Java 類庫。可以将一個 JSON 字元串轉成一個 Java 對象,将java對象轉換成Json字元串。

上面就是Gson的簡單解釋。

下面我們就開始來使用Gson

第一步 下載下傳

Gson 被google釋出到了github上。我們可以在github上下載下傳下來

https://github.com/google/gson

Gson的使用第一步 下載下傳第二步 生成gson.jar 包第三步 使用

下載下傳下來之後。解壓。我們就可以看到下載下傳了一堆東西。

Gson的使用第一步 下載下傳第二步 生成gson.jar 包第三步 使用

就像上面圖檔上一樣。 不過我們隻需要gson這個檔案夾 就可以了。

第二步 生成gson.jar 包

我們打開gson這個檔案夾。看到了pom.xml 大概明白了。這是個maven項目。但是我這裡eclipse沒有maven環境。也懶得為了生成一個jar包去下載下傳、配置maven 哈哈。是有點懶。不過我其他沒有什麼地方用到maven 。是以這裡我就說一種不用maven生成gson.jar包的方式。 知道的,有maven環境的可以略過 自行生成gson.jar包。 下面。來、擺好姿勢。跟着我的節奏一起來。

一:

我們找到解壓好的gson檔案夾.

二:

我們打開eclipse 建立一個Java 項目 記住 是Java Project

三:

我們回到解壓的gson檔案夾。依次打開 gson/src/main/java/這個目錄下,我們看到了一個com檔案夾。我們複制這個檔案夾。然後回到eclipse右擊我們建立的Gson項目的src檔案夾,選擇paste 粘貼到這裡。

我們就看到了。gson的源代碼就粘貼到我們建立的Gson java項目裡了。

Gson的使用第一步 下載下傳第二步 生成gson.jar 包第三步 使用

四:

配置Gson項目的java編譯版本 ,右擊Gson這個項目 選擇 properties

Gson的使用第一步 下載下傳第二步 生成gson.jar 包第三步 使用

記得要選擇1.6 這個很重要。否則很容易就會出現

Conversion to Dalvik format failed: Unable to execute

這個蛋疼的錯誤。

五:

沒有報錯。然後就直接export 到出成jar包。 就生成了我們需要的gson.jar檔案了。

好了。經過以上的步驟。我們已經成功的生成了一個gson.jar檔案。

第三步 使用

首先就是建立一個android項目。

在MainActivity裡。添加下面的代碼。

private Gson        mGson       = new Gson();
/**
 * @author brok1n
 *         方法名稱:encodeJson
 *         描述:TODO(建立json資料)
 *         建立時間:2015年11月23日 下午2:49:08
 *         void
 */
private void encodeJson()
{
    /**
     * -------------------------
     * 使用實體類對象、集合  生成json資料字元串
     * -------------------------
     * */
    List< UserBean > list = new ArrayList< UserBean >();
    for ( int i = ; i < ; i++ )
    {
        // 使用者實體
        UserBean userBean = new UserBean();
        userBean.setUserName( "brok1n" + i );
        userBean.setPassword( "123456" + i );
        userBean.setSex(  + i );

        // 生日實體
        Birthday birthday = new Birthday();
        birthday.setYear(  + i );
        birthday.setMonth(  + i );
        birthday.setDay(  + i );

        userBean.setBirthday( birthday );
        list.add( userBean );
    }

    String userBeanJsonStr = mGson.toJson( list );
    Log.e( "GsonDemo userBean", userBeanJsonStr );

    /**
     * 以上就是使用 實體類對象  利用Gson 生成字元串的使用方法
     * -----------------------------
     * 下面是 利用Gson将單一字段來組織成Json字元串
     * */

    JsonArray array = new JsonArray();
    for ( int i = ; i < ; i++ )
    {
        //建立User使用者資料json對象
        JsonObject jsonObject =new JsonObject();
        //下面示範了 向jsonObject裡添加資料的兩種方法。
        // addProperty 和add 大家根據下面的例子、斟酌自己需要用哪個。
        jsonObject.addProperty( "userName", "張三" + i );
        jsonObject.add( "password", new JsonPrimitive( "123456" + i ) );
        jsonObject.addProperty( "sex", new Integer(  + i ) );

        //建立birthday對象
        JsonObject birthday = new JsonObject();
        birthday.addProperty( "year", new Integer(  + i ) );
        birthday.addProperty( "month", new Integer(  + i ) );
        birthday.addProperty( "day", new Integer(  + i ) );

        //将birthday添加到user對象
        jsonObject.add( "birthday", birthday );

        //将這個user對象添加到數組 jsonArray
        array.add( jsonObject );
    }

    Log.e( "GsonDemo add", array.toString() );
}
           

上面這函數的代碼。示範了怎麼去使用java實體類對象建立json資料字元串。以及使用Gson單獨的添加json字段。

下面我們來看看輸出的結果。

Gson的使用第一步 下載下傳第二步 生成gson.jar 包第三步 使用
- ::: E/GsonDemo userBean(): [{"birthday":{"day":,"month":,"year":},"password":"1234560","userName":"brok1n0","sex":},{"birthday":{"day":,"month":,"year":},"password":"1234561","userName":"brok1n1","sex":},{"birthday":{"day":,"month":,"year":},"password":"1234562","userName":"brok1n2","sex":},{"birthday":{"day":,"month":,"year":},"password":"1234563","userName":"brok1n3","sex":},{"birthday":{"day":,"month":,"year":},"password":"1234564","userName":"brok1n4","sex":}]
- ::: E/GsonDemo add(): [{"userName":"張三0","password":"1234560","sex":,"birthday":{"year":,"month":,"day":}},{"userName":"張三1","password":"1234561","sex":,"birthday":{"year":,"month":,"day":}},{"userName":"張三2","password":"1234562","sex":,"birthday":{"year":,"month":,"day":}},{"userName":"張三3","password":"1234563","sex":,"birthday":{"year":,"month":,"day":}},{"userName":"張三4","password":"1234564","sex":,"birthday":{"year":,"month":,"day":}}]
           

然後下面。我們來看看怎麼去用Gson解析json字元串。

在MainActivity中添加下面的代碼。

/**
 * @author brok1n
 *         方法名稱:decodeJson
 *         描述:TODO(解析json資料)
 *         建立時間:2015年11月23日 下午2:48:53
 *         void
 */
private void decodeJson()
{
    /**
     * -------------------------
     * 使用json字元串 生成實體類對象、集合
     * -------------------------
     * */
    //這裡模拟從伺服器擷取到的jsonArray 資料
    //String jsonStr = "[{\"birthday\":{\"day\":8,\"month\":2,\"year\":1998},\"password\":\"1234560\",\"userName\":\"brok1n0\",\"sex\":1},{\"birthday\":{\"day\":9,\"month\":3,\"year\":1999},\"password\":\"1234561\",\"userName\":\"brok1n1\",\"sex\":2},{\"birthday\":{\"day\":10,\"month\":4,\"year\":2000},\"password\":\"1234562\",\"userName\":\"brok1n2\",\"sex\":3},{\"birthday\":{\"day\":11,\"month\":5,\"year\":2001},\"password\":\"1234563\",\"userName\":\"brok1n3\",\"sex\":4}]";
    String jsonStr = "[{"birthday":{"day":8,"month":2,"year":1998},"password":"","userName":"brok1n0","sex":1},{"birthday":{"day":9,"month":3,"year":1999},"password":"","userName":"brok1n1","sex":2},{"birthday":{"day":10,"month":4,"year":2000},"password":"","userName":"brok1n2","sex":3},{"birthday":{"day":11,"month":5,"year":2001},"password":"","userName":"brok1n3","sex":4}]";

    //定義要解析的類型
    Type type = new TypeToken<List<UserBean>>(){}.getType();

    //吧jsonArray字元串解析成List集合  在程式裡就可以直接使用。
    List< UserBean > list = mGson.fromJson( jsonStr , type );

    Log.e( "GsonDemo parse List", list.toString() );

    /**
     * -------------------------
     * 下面是将jsonObject類型資料字元串。使用Gson直接轉換成JavaBean 實體類對象
     * */
    //String userStr = "{\"birthday\":{\"day\":8,\"month\":2,\"year\":1998},\"password\":\"1234560\",\"userName\":\"brok1n0\",\"sex\":1}";
    String userStr = "{\"birthday\":{"day":8,"month":2,"year":1998},"password":"","userName":"brok1n0","sex":1}";
    UserBean userBean = mGson.fromJson( userStr, UserBean.class );
    Log.e( "GsonDemo parse JavaBean", userBean.toString() );

    /**
     * ------------------------
     * 下面是使用gson 解析單個的字段
     * */
    //解析JsonObject
    //String objStr = "{\"like\":[\"唱歌\", \"旅遊\"],\"birthday\":{\"day\":8,\"month\":2,\"year\":1998},\"password\":\"1234560\",\"userName\":\"brok1n0\",\"sex\":1}";
    String objStr = "{"like":["唱歌", "旅遊"],"birthday":{"day":8,"month":2,"year":1998},"password":"","userName":"brok1n0","sex":1}";
    JsonObject jsonObject = mJsonParser.parse( objStr ).getAsJsonObject();

    //取String類型的字段
    String userName = jsonObject.get( "userName" ).getAsString();
    Log.e( "GsonDemo parse String attribute", "userName:" + userName );

    //取int類型的字段
    int sex         = jsonObject.get( "sex" ).getAsInt();
    Log.e( "GsonDemo parse int attribute", "sex:" + sex );

    //取jsonObject類型的字段  兩種方式
    JsonObject birthday = jsonObject.get( "birthday" ).getAsJsonObject();
    JsonObject birthday1 = jsonObject.getAsJsonObject( "birthday" );
    Log.e( "GsonDemo parse object attribute", "birthday:" + mGson.toJson( birthday ) + "  birthday1:" + mGson.toJson( birthday1 ) );

    //取jsonArray 
    JsonArray  like = jsonObject.get( "like" ).getAsJsonArray();
    JsonArray  like1 = jsonObject.getAsJsonArray( "like" );
    //這裡示範了直接用Json對象添加字段。jsonObject添加字段和可以在encodeJson()裡檢視
    like.add( "喝酒" );
    like.add( "吃黃焖雞米飯" );
    //這裡建立了一個JsonArray類型的資料
    JsonArray childLike = new JsonArray();
    childLike.add( "吃飯" );
    childLike.add( "睡覺" );
    childLike.add( "打豆豆" );
    //将這個JsonArray類型資料當做like這個JsonArray中的一個節點添加進去
    like.add( childLike );
    //建立一個JsonObject 并添加到like這個JsonArray中
    JsonObject childObj = new JsonObject();
    childObj.addProperty( "smoking", new Integer(  ) );
    childObj.addProperty( "color", "藍色" );
    like.add( childObj );
    Log.e( "GsonDemo parse array attribute", "like:" + mGson.toJson( like ) + "  like1:" + mGson.toJson( like1 ) );

    /**
     * 以上就是Gson解析資料的所有用法。當然這是目前我所使用過的。
     * --------------------------
     * */
}
           

由于json字元串需要内部有雙引号。以及代碼字元串外部的雙引号問題。我都給添加了反斜線轉義字元。同時又為了友善大家的使用。我給上面留了一行添加轉義字元的注釋行。大家把代碼拷貝下去。隻需要把下面一行錯誤的注釋、上面一行被注釋的注釋打開。就可以了。

這裡。示範了gson的很多功能。例如往json對象裡添加資料、 往jsonArray集合裡添加資料。以及将jsonArray轉換成java的集合List 以及将jsonObject轉換成JavaBean 以及單獨的解析int類型值、String類型值、等。

好了。上一下這個的結果圖。

Gson的使用第一步 下載下傳第二步 生成gson.jar 包第三步 使用
- ::: E/GsonDemo parse List(): [UserBean [userName=brok1n0, password=, sex=, birthday=Birthday [year=, month=, day=]], UserBean [userName=brok1n1, password=, sex=, birthday=Birthday [year=, month=, day=]], UserBean [userName=brok1n2, password=, sex=, birthday=Birthday [year=, month=, day=]], UserBean [userName=brok1n3, password=, sex=, birthday=Birthday [year=, month=, day=]]]
- ::: E/GsonDemo parse JavaBean(): UserBean [userName=brok1n0, password=, sex=, birthday=Birthday [year=, month=, day=]]
- ::: E/GsonDemo parse String attribute(): userName:brok1n0
- ::: E/GsonDemo parse int attribute(): sex:
- ::: E/GsonDemo parse object attribute(): birthday:{"day":,"month":,"year":}  birthday1:{"day":,"month":,"year":}
- ::: E/GsonDemo parse array attribute(): like:["唱歌","旅遊","喝酒","吃黃焖雞米飯",["吃飯","睡覺","打豆豆"],{"smoking":,"color":"藍色"}]  like1:["唱歌","旅遊","喝酒","吃黃焖雞米飯",["吃飯","睡覺","打豆豆"],{"smoking":,"color":"藍色"}]
           

好了。帶領大家一起飛的時間就要結束了。歡樂的時光總是那麼的短暫。關于json的其他不明白的東西。可以看看我之前的一篇文章。那裡有對json更詳細的解釋。

同時。Gson 建立出來的JsonObject可以像操作JAVA對象一樣操作json資料。

JsonElement 就是Gson這裡的節點。這個節點可以轉換成各種json資料類型。轉換方式就如同上面代碼裡寫的。getAsInt(); getAsString() getAsJsonObject() 、、、等。自行可以吧代碼提示按出來。自己看看。

by brok1n 20151123