Android 解析JSON数据详解

108 阅读1分钟

1. 概述

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于 Web API 交互。Kotlin 提供了多种解析 JSON 数据的方法,其中 org.json.JSONObjectGson 是常见的选择。

2. 适用场景

  • 解析网络请求返回的 JSON 数据
  • 存储和读取本地 JSON 配置文件
  • 序列化/反序列化 Kotlin 数据类

3. JSON 示例

假设有如下 JSON 数据 sample.json

{
  "apps": [
    {
      "id": 1,
      "name": "MyApp",
      "version": "1.0.0"
    },
    {
      "id": 2,
      "name": "AnotherApp",
      "version": "2.3.4"
    }
  ]
}

4. 解析方式

4.1 使用 org.json 解析 JSON

Kotlin 可以使用 org.json.JSONObjectorg.json.JSONArray 解析 JSON。

import org.json.JSONObject
​
fun parseJson(jsonData: String) {
    val jsonObject = JSONObject(jsonData)
    val appsArray = jsonObject.getJSONArray("apps")
    
    for (i in 0 until appsArray.length()) {
        val appObject = appsArray.getJSONObject(i)
        val id = appObject.getInt("id")
        val name = appObject.getString("name")
        val version = appObject.getString("version")
        
        println("App ID: $id, Name: $name, Version: $version")
    }
}

4.2 使用 Gson 解析 JSON

Gson 是 Google 提供的 JSON 库,可用于对象与 JSON 之间的转换。

添加依赖:

dependencies {
    implementation("com.google.code.gson:gson:2.8.9")
}

定义数据类并解析 JSON:

import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
​
// 定义数据类
data class App(
    val id: Int,
    val name: String,
    val version: String
)
​
data class AppList(
    @SerializedName("apps") val apps: List<App>
)
​
fun parseJsonWithGson(jsonData: String) {
    val gson = Gson()
    val appList = gson.fromJson(jsonData, AppList::class.java)
    
    appList.apps.forEach {
        println("App ID: ${it.id}, Name: ${it.name}, Version: ${it.version}")
    }
}

5. 解析流程

  1. 选择解析方式org.jsonGson)。
  2. 解析 JSON 数据(对象映射或手动解析)。
  3. 处理数据(存储、展示或操作)。

6. 适用场景对比

解析方式适用场景备注
org.json简单解析 JSON适合临时处理,性能较低
Gson解析 API 响应或本地 JSON 文件易用,支持复杂对象映射

7. 结论

对于 Kotlin 开发者,推荐使用 **Gson**,它提供了更灵活的数据映射能力,适用于大多数 JSON 解析需求。