解析JSON格式数据
比起XML,JSON的体积更小,语义性更差
传入的JSON文件如下
使用JSONObject
private fun parseJSONWithJSONObject(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()
}
}
非常简单,无需多言。
进行一个循环。
使用GSON
还有鼻JSONObject更加简单的,那就是Google提供的GSON,会让你的JSON解析更加简单!
首先添加依赖
implementation 'com.google.code.gson:gson:2.8.5'
GSON的强大之处在于可以将一段JSON格式的字符串自动映射成一个对象,而不需要手动进行编写代码。
比如{“name”:“Tom”,“age”:20}
我们就可以定义一个Person类,并且加入name和age两个字段。
然后简单调用即可。
val gson = Gson()
val person = gson.fromJson(jsonData,Person::class.java)
如果是一组JSON数组,会稍微麻烦一点。
比如
[{"name":"Tom","age":20},{"name":"Jack","age":25},{"name":"Lily","age":22}]
这个时候就需要借助TypeToken将期望解析成数据类型传入fromJson()中,如下所示:
val typeOf = object:TypeToken<List<Person>> (){}.type
val person = gson.fromJson<List<Person>>(jsonData,typeOf)
新增一个App类
class App(val id:String, val name:String, val version:String)
实操
创建函数 parseJSONWithGSON,如下
private fun parseJSONWithJGSON(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}")
}
}