添加Gson
添加到我們的build.gradle(Module: app)
dependencies {
...
compile 'com.google.code.gson:gson:2.8.2'
}
觀察JSON格式
可以看出這個JSON是一個[]裡面有10個{}裡面,所以這是個Json Array, 但這個Array的元素都是Json Object !!
那先設定想要取得的內容, 比如說這五個欄位值 id, name, email, address的 city, company的 name
字串轉JsonArray
我新建一個Context的擴展函數,取名叫handleJsonStr
可以看到使用了gson.fromJson(jsonStr, JsonArray::class.java),需要兩個參數。 第一個參數填入我們要解析的JSON字串, 剛剛有提到這基本上是個JsonArray,所以第二個參數填入JsonArray::class.java
fun Context.handleJsonstr(jsonStr: String, textView: TextView) {
val gson = Gson()
val userArray = gson.fromJson(jsonStr, JsonArray::class.java)
val stringBuilder = StringBuilder()
for (user in userArray) {
val userObj = user.asJsonObject
val userId = userObj.get("id")
val userCityAddress = userObj.getAsJsonObject("address").get("city")
val userCompanyName = userObj.getAsJsonObject("company").get("name")
val userName = userObj["name"]
stringBuilder.append("$userId. 名稱:$userName, 城市:$userCityAddress, 公司:$userCompanyName\n\n")
}
runOnUiThread {
textView.text = stringBuilder.toString()
}
}
我用了for迭代這個userArray,因為每個user都是個Json物件,
所以要先用asJsonObject轉換成Json Object,然後都用get取值。
然後最底下有個runOnUiThread, 那是因為textView的值只能在Ui執行緒底修改。
參考
完整專案
Java下json的解析方法-----GSON与JSONObject
我是看這個Java的Gson教學做學習的, 如果想理解如何類別轉JSON字串可以看這個。
只要注意一般Java類別在定義時可以留空,像是
class JavaClass {
String name;
int age;
}
而Kotlin你必須註明為lateinit var,代表你之後建立物件時會初始化該屬性
// 第一種
class KotlinClass {
lateinit var name: String
var age: Int? = null // Int是基本型態,不能用lateinit var
}
或
// 第二種: 但這種建立物件時,就必須要有完整參數。
class KoltinClass(val name: String, val age: Int)
還有那篇教學中有些程式碼會出現一些& lt 或 & gt, 那其實就是< 和 >, 這只是Html的編碼顯示問題,腦內自行轉換就可以了。