书上P444讲的更好

1. 概述

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

2. 适用场景

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

3. JSON 示例

假设有如下 JSON 数据 sample.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"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。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 之间的转换。

添加依赖:

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

定义数据类并解析 JSON:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 解析需求。