Givemepass's Android 惡補筆記

如何使用Gson

| Comments

有人詢問怎麼使用Json, 其實使用Gson會更方便
http://www.ptt.cc/bbs/AndroidDev/M.1413811997.A.D0E.html

其實Gson就是google拿來簡易操作Json的工具, 在使用上更是直覺.
Gson

首先先把gson的lib丟到你的專案
然後就可以開始使用了

先宣告一個物件

Gson gson = new Gson();

接著你已經抓到網址內的json file了
轉成字串以後
利用這個網站 可以看到json的對應關係
json parse

可以清楚看到你的json長這樣

[
    {
        "chanel":"FM",
        "week":"日",
        "start_time":"09:00",
        "end_time":"10:00",
        "program":"勞動聲活",
        "DJ":"【北市勞動局合作】"
    }
]

其實蠻簡單的 就一種物件被包在陣列裡面

那麼就宣告一個類別來裝這個物件

class MyJsonObj{

        @SerializedName("chanel")
        private String chanelStr;

        @SerializedName("week")
        private String weekStr;

        @SerializedName("start_time")
        private String startTime;

        @SerializedName("end_time")
        private String endTime;

        @SerializedName("DJ")
        private String djStr;

        public String getChanelStr() {
                return chanelStr;
        }

        public void setChanelStr(String chanelStr) {
                this.chanelStr = chanelStr;
        }

        public String getWeekStr() {
                return weekStr;
        }

        public void setWeekStr(String weekStr) {
                this.weekStr = weekStr;
        }

        public String getStartTime() {
                return startTime;
        }

        public void setStartTime(String startTime) {
                this.startTime = startTime;
        }

        public String getEndTime() {
                return endTime;
        }

        public void setEndTime(String endTime) {
                this.endTime = endTime;
        }

        public String getDjStr() {
                return djStr;
        }

        public void setDjStr(String djStr) {
                this.djStr = djStr;
        }
}

上面getter setter就利用IDE來產生
這邊只要記住一個關鍵點 就是annotation
一定要對應到json的key 不然會有錯

觀察一下json 他是由一個array包起來的
所以我直接用arraylist把整個物件包起來

Gson gson = new Gson();
Type listType = new TypeToken<ArrayList<MyJsonObj>>() {}.getType();
ArrayList<MyJsonObj> jsonArr = gson.fromJson(jsonStr, listType);
for(MyJsonObj obj : jsonArr){
   System.out.println("obj chanel:" + obj.getChanelStr());
   System.out.println("obj start time:" + obj.getStartTime());
   System.out.println("obj end time:" + obj.getEndTime());
   System.out.println("obj week:" + obj.getWeekStr());
   System.out.println("obj DJ:" + obj.getDjStr());
}

jsonStr就是從你連結的json抓出來的
由於是陣列包物件 你就要這樣寫

可以參考一下這篇
http://kaihgcode.blogspot.tw/2014/08/apiapijsonstring-gson-json.html

import要用到這些

import java.lang.reflect.Type;
import java.util.ArrayList;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

那麼看結果

obj chanel:FM
obj start time:09:00
obj end time:10:00
obj week:
obj DJ:【北市勞動局合作】

gson就是這麼簡單
他也提供物件轉回json的功能
簡單來說他就是一個轉接器
幫你把json資料跟物件轉來轉去的一種工具
其實很多工具都用這種類型在轉換了

例如資料庫 ORMLite也很方便
讓你不用再去記如何開啟查詢資料庫 也避免掉很多低級錯誤

參考看看XD
程式碼
http://uploadingit.com/file/vz49nqpmimylzrmx/GsonDemo.zip

Comments

comments powered by Disqus