25. 数据解析之JSON
25.1 使用JSONObject-不建议,麻烦
val jsonData = "[{"id":"5","version":"5.5","name":"Clash of Clans"}," +
"{"id":"6","version":"7.0","name":"Boom Beach"}," +
"{"id":"7","version":"3.5","name":"Clash Royal"}]"
官方提供的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()
}
}
25.2 使用GSON
GSON可以将一段JSON格式的字符串自动映射成一个对象,从而不需要我们再手动编写代码进行解析了。
同样GSON也可以将一个对象转换成JSON字符串。
添加依赖
implementation 'com.google.code.gson:gson:2.8.5'
val gson = Gson()
// 转对象
val personJson = "{'name':'Tom','age':20}"
val person = gson.fromJson(personJson, Person::class.java)
Log.d("MainActivity", "${person.name}:${person.age}")
// 转数组
val appsJson = "[{"id":"5","version":"5.5","name":"Clash of Clans"}," +
"{"id":"6","version":"7.0","name":"Boom Beach"}," +
"{"id":"7","version":"3.5","name":"Clash Royal"}]"
val typeOf = object : TypeToken<List<AppBean>>(){}.type
val apps = gson.fromJson<List<AppBean>>(appsJson, typeOf)
for (app in apps) {
Log.d("MainActivity", "${app.id};${app.version};${app.name}")
}
// 嵌套对象
val appPersonJson = "{'id':'5','version':'5.5','name':'Clash of Clans', 'person':{'name':'Tom','age':20}}"
val appPerson = gson.fromJson(appPersonJson, AppBean::class.java)
Log.d("MainActivity", "${appPerson.person?.name}:${appPerson.person?.age}")
class AppBean(val id: String, val name: String, val version: String) {
var person: Person? = null
}
class Person(val name: String, val age: Int) {
}
25.3 使用fastjson
具体可参考官方文档:github.com/alibaba/fas…
添加依赖
implementation 'com.alibaba:fastjson:2.0.28'