在Kotlin中处理JSON:面向初学者的解析与序列化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么Kotlin需要处理JSON?

\n\n

JSON(JavaScript对象表示法)是一种轻量级数据交换格式,已成为现代Web应用和API的标准。无论您是用Kotlin编写Android应用还是服务器端程序,迟早都需要解析来自服务器的JSON响应,或将您的对象序列化以便发送。

\n\n

Kotlin是一种现代语言,运行在JVM之上,并与Java完全兼容。然而,Kotlin拥有自己强大的JSON处理工具,使代码更加简洁和安全。在本文中,我们将介绍两种最流行的方法:使用官方库kotlinx.serialization和久经考验的Gson。

\n\n

本文面向初学者。我们将从简单的字符串解析开始,然后转向创建复杂的嵌套结构,最后介绍序列化——将您的对象转换回JSON。

\n\n

1. 项目准备:依赖项和导入

\n\n

在编写代码之前,需要添加库。我们将介绍两种方案。

\n\n

1.1. 安装kotlinx.serialization

\n\n

这是JetBrains的官方解决方案。在build.gradle.kts文件中添加:

\n\n
plugins {\n    kotlin("jvm") version "1.9.0"\n    kotlin("plugin.serialization") version "1.9.0"\n}\n\ndependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")\n}\n
\n\n

1.2. 安装Gson

\n\n

Gson是Google的库。它配置更简单,但需要更多手动操作:

\n\n
dependencies {\n    implementation("com.google.code.gson:gson:2.10.1")\n}\n
\n\n

同步项目后即可编写代码。

\n\n

2. 使用kotlinx.serialization在Kotlin中解析JSON

\n\n

这种方法是最“Kotlin风格”的。您声明data类并添加@Serializable注解。库会自动生成解析代码。

\n\n

2.1. 简单示例:用户数据

\n\n

假设我们有一个JSON字符串:

\n\n
{\n    "name": "安娜",\n    "age": 25,\n    "email": "anna@example.com"\n}\n
\n\n

创建模型:

\n\n
import kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n    val name: String,\n    val age: Int,\n    val email: String\n)\n\nfun main() {\n    val jsonString = """\n        {\n            "name": "安娜",\n            "age": 25,\n            "email": "anna@example.com"\n        }\n    """.trimIndent()\n\n    val user = Json.decodeFromString<User>(jsonString)\n    println("姓名: ${user.name}, 年龄: ${user.age}")\n}\n
\n\n

如您所见,无需手动映射——一切都是自动完成的。

\n\n

2.2. 处理列表和嵌套对象

\n\n

真实的API经常返回数组。添加address字段:

\n\n
@Serializable\ndata class Address(\n    val city: String,\n    val street: String\n)\n\n@Serializable\ndata class UserWithAddress(\n    val name: String,\n    val age: Int,\n    val address: Address\n)\n\nfun main() {\n    val jsonArray = """\n        [\n            {"name": "伊万", "age": 30, "address": {"city": "莫斯科", "street": "特维尔大街"}},\n            {"name": "玛丽亚", "age": 22, "address": {"city": "圣彼得堡", "street": "涅瓦大街"}}\n        ]\n    """.trimIndent()\n\n    val users = Json.decodeFromString<List<UserWithAddress>>(jsonArray)\n    users.forEach { println("${it.name} 住在 ${it.address.city}") }\n}\n
\n\n

注意:处理列表时使用泛型List<UserWithAddress>。

\n\n

3. 使用Gson解析JSON

\n\n

Gson是经典的Java库。它在Kotlin中同样运行良好,但需要稍多一些代码。

\n\n

3.1. 基本解析

\n\n
import com.google.gson.Gson\n\ndata cl                

博客

书籍推荐