二十五、Android-数据解析之JSON

105 阅读1分钟

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'