如何使用Gson(kotlin)

如何使用Gson(kotlin)

情境

Gson 是 Google 開發的一套工具,它可以輕易讓你操作 Json,輕鬆的轉換成物件。

完整程式碼

你可以到 GitHub 上面觀看或下載完整程式碼。

程式碼說明

在 Gradle 加入 Gson 的導入就可以開始使用了。

implementation 'com.google.code.gson:gson:2.8.5'

首先宣告一個物件。

val gson = Gson()

接著你已經抓到網址內的 Json File 了,轉成字串以後,利用 Json parse 網站可以看到 Json 的對應關係,可以清楚看到你的 Json 長這樣。

[  
    {  
        "id":1,  
        "age":30,  
        "start_time":"09:00",  
        "end_time":"10:00",  
        "name":"kerker",  
        "nickname":"Test"  
    }  
]

其實蠻簡單的就一種物件被包在陣列裡面,那麼就宣告一個類別來裝這個物件。

class MyJsonObj {  
    @SerializedName("id")  
    var id: Int = 0  
  
    @SerializedName("age")  
    var age: Int = 0  
  
    @SerializedName("start_time")  
    var startTime: String? = null  
  
    @SerializedName("end_time")  
    var endTime: String? = null  
  
    @SerializedName("name")  
    var name: String? = null  
  
    @SerializedName("nickname")  
    var nickname: String? = null  
}

這邊只要記住一個關鍵點就是 Annotation(@),一定要對應到 Json 的 Key,不然會有錯。
觀察一下 Json 他是由一個 Array 包起來的,所以我直接用 Arraylist 把整個物件包起來。

class MainActivity : AppCompatActivity() {  
    private val jsonStr = "[\n" +  
            "    {\n" +  
            "        \"id\":1,\n" +  
            "        \"age\":30,\n" +  
            "        \"start_time\":\"09:00\",\n" +  
            "        \"end_time\":\"10:00\",\n" +  
            "        \"name\":\"Kerker\",\n" +  
            "        \"nickname\":\"Test\"\n" +  
            "    }\n" +  
            "," +  
            "    {\n" +  
            "        \"id\":2,\n" +  
            "        \"age\":20,\n" +  
            "        \"start_time\":\"09:00\",\n" +  
            "        \"end_time\":\"10:00\",\n" +  
            "        \"name\":\"abc\",\n" +  
            "        \"nickname\":\"efg\"\n" +  
            "    }\n" +  
            "]"  
  
    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        setContentView(R.layout._activity_main_)  
  
        val listType = object : TypeToken<ArrayList<MyJsonObj>>(){}._type_ val jsonArr = Gson().fromJson<ArrayList<MyJsonObj>>(jsonStr, listType)  
        val sb = StringBuffer()  
        for (obj in jsonArr) {  
            sb.append("id:" + obj.id + "\n")  
            sb.append("age:" + obj.age + "\n")  
            sb.append("start time:" + obj.startTime + "\n")  
            sb.append("end time:" + obj.endTime + "\n")  
            sb.append("name:" + obj.name + "\n")  
            sb.append("nickname:" + obj.nickname + "\n")  
        }  
        show_text._text_ = sb.toString()  
    }  
}

jsonStr 就是從你連結的 Json 抓出來的,由於是陣列包物件,可以參考一下 以下連結。
http://kaihgcode.blogspot.tw/2014/08/apiapijsonstring-gson-json.html

那麼看結果。


他也提供物件轉回 Json 的功能,簡單來說他就是一個轉接器,幫你把 Json 資料跟物件轉來轉去的一種工具,其實很多工具都用這種類型在轉換了,也避免掉很多錯誤,這樣就是一個簡單的 Gson 操作的範例了。