Android解析JSON格式數(shù)據(jù)的兩種方式(JSONObject和Gson)
Json數(shù)據(jù)
接下來(lái)主要學(xué)習(xí)在Android中使用兩種解析方式:JSONObject和Gson。
JSONObject
比如我們有如下格式的Json數(shù)據(jù):
[{"id":"1","verison":"1.0","name":"shufu"},
{"id":"2","verison":"2.2","name":"pangzi"},
{"id":"3","verison":"3.3","name":"john"}]
使用官方提供的JSONObject。解析代碼如下所示:
private fun parserJSONWithJSONObject(jsonData: String) {
try {
val jsonArray = JSONArray(jsonData)
for (i in 0 until jsonArray.length()) {
val jsonObject = jsonArray.getJSONObject(i)
val id = jsonObject.getString("id")
val name = jsonObject.getString("name")
val version = jsonObject.getString("version")
Log.d("MainActivity", "id is $id")
Log.d("MainActivity", "name is $name")
Log.d("MainActivity", "version is $version")
}
} catch (e: Exception) {
e.printStackTrace()
}
}解釋?zhuān)菏紫葘?shù)據(jù)傳入JSONArray對(duì)象中,然后循環(huán)遍歷,從中取出的每一個(gè)元素都是一個(gè)JSONObject對(duì)象,每個(gè)JSONObject對(duì)象中包含了id、name、version數(shù)據(jù),只需要調(diào)用getString()方法就能取出。
GSON
這是Google提供的GSON開(kāi)源庫(kù),使用也很簡(jiǎn)單。它的強(qiáng)大之處在于可以將一段JSON格式的字符串自動(dòng)映射成一個(gè)對(duì)象,從而不需要我們手動(dòng)編寫(xiě)代碼解析了。
添加依賴(lài)
implementation 'com.google.code.gson:gson:2.8.6'
比如一段JSON格式的數(shù)據(jù)如下:
{"name":"John","age":18}
那么可以定義一個(gè)Person類(lèi),加入name和age字段,然后只需調(diào)用以下代碼就能將JSON數(shù)據(jù)自動(dòng)解析成一個(gè)Person對(duì)象了:
val gson = Gson() val person = gson.fromJson(jsonData, Person::class.java)
如果需要解析的是一段JSON數(shù)組,比如:
[{"name":"John","age":18},
{"name":"Jack","age":19},
{"name":"shufu","age":20}]
這個(gè)時(shí)候需要借助TypeToken將期望解析成的數(shù)據(jù)類(lèi)型傳入fromJson()方法中:
val typeOf = object : TypeToken<List<Person>>() {}.type
val people = gson.fromJson<List<Person>>(jsonData, typeOf)
實(shí)際操作
實(shí)體類(lèi)
新建一個(gè)App類(lèi),加入id、name、version字段:
class App(val id: String, val name: String, val version: String)
MainActivity代碼:
private fun parseJSONWithGSON(jsonData: String) {
val gson = Gson()
val typeOf = object : TypeToken<List<App>>() {}.type
val appList = gson.fromJson<List<App>>(jsonData,typeOf)
for (app in appList) {
Log.d("MainActivity", "id is ${app.id}")
Log.d("MainActivity", "name is ${app.name}")
Log.d("MainActivity", "version is ${app.version}")
}
}
總結(jié)
到此這篇關(guān)于Android解析JSON格式數(shù)據(jù)的兩種方式的文章就介紹到這了,更多相關(guān)Android解析JSON格式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android SQLite數(shù)據(jù)庫(kù)增刪改查操作的使用詳解
本篇文章介紹了,在Android中SQLite數(shù)據(jù)庫(kù)增刪改查操作的使用詳解。需要的朋友參考下2013-04-04
Android自定義View實(shí)現(xiàn)垂直時(shí)間軸布局
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)垂直時(shí)間軸布局的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android實(shí)現(xiàn)懸浮對(duì)話(huà)框代碼
這篇文章主要介紹了Android實(shí)現(xiàn)懸浮對(duì)話(huà)框代碼的相關(guān)資料,需要的朋友可以參考下2016-03-03
Android實(shí)現(xiàn)動(dòng)態(tài)體溫計(jì)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)動(dòng)態(tài)體溫計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
Android自定義控件實(shí)現(xiàn)帶文字提示的SeekBar
這篇文章主要給大家介紹了關(guān)于Android自定義控件實(shí)現(xiàn)帶文字提示的SeekBar的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
Android 優(yōu)化之a(chǎn)pp啟動(dòng)優(yōu)化的實(shí)現(xiàn)
這篇文章主要介紹了Android 優(yōu)化之啟動(dòng)優(yōu)化的實(shí)現(xiàn),啟動(dòng)分為冷啟動(dòng)和熱啟動(dòng),溫啟動(dòng),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Android開(kāi)發(fā)之拖動(dòng)條和評(píng)分組件用法分析
這篇文章主要介紹了Android開(kāi)發(fā)之拖動(dòng)條和評(píng)分組件用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android拖動(dòng)條及評(píng)分組件的布局與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-07-07

