Kotlin中的JSON处理:数据解析与序列化

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

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

开始课程

在 Kotlin 中使用 JSON 的入门指南



JSON (JavaScript Object Notation) 是服务器与客户端之间最流行的数据交换格式之一。在现代 Kotlin 开发中,无论是 Android 应用还是服务器端项目,高效处理 JSON 都是一项必备技能。本文将详细讲解如何使用最流行的库 kotlinx.serialization 和 Gson 在 Kotlin 中执行 JSON 的解析和序列化。



无论您是在创建 REST API、处理外部服务的响应,还是保存本地设置,理解 JSON 的工作原理都将帮助您编写更清晰、更高效的代码。



Kotlin 中 JSON 解析基础



什么是序列化和反序列化?



在进入代码之前,理解两个关键概念很重要:



  • 序列化 — 将 Kotlin 对象(data class、列表等)转换为 JSON 字符串。
  • 反序列化(解析) — 反向过程:从 JSON 字符串创建 Kotlin 对象。


Kotlin 没有内置的 JSON 支持,因此我们使用第三方库。下面介绍两个最流行的库。



kotlinx.serialization 库



kotlinx.serialization 是 JetBrains 的官方库,与 Kotlin 语言完美集成。它在编译阶段工作,提供了高性能和类型安全。



添加库依赖



首先,在 build.gradle.kts 中添加插件:



plugins {    kotlin("plugin.serialization") version "1.9.22"}

dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}


定义数据模型



创建一个表示用户的类:



import kotlinx.serialization.Serializable

@Serializabledata class User( val name: String, val age: Int, val email: String? = null, // nullable 字段 val roles: List<String> = emptyList())


@Serializable 注解告诉编译器这个类可以被序列化。



序列化(对象 → JSON)



import kotlinx.serialization.encodeToStringimport kotlinx.serialization.json.Json

fun main() { val user = User( name = "安娜", age = 28, email = "anna@example.com", roles = listOf("admin", "user") )

val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"安娜","age":28,"email":"anna@example.com","roles":["admin","user"]}}


反序列化(JSON → 对象)



import kotlinx.serialization.decodeFromString

fun main() { val json = """{"name":"伊万","age":35,"roles":["user"]}""" val user = Json.decodeFromString<User>(json) println(user.name) // 伊万 println(user.email) // null (JSON 中未指定)}


配置 Json 设置



您可以自定义解析器的行为:



val json = Json {    prettyPrint = true          // 美化输出格式    ignoreUnknownKeys = true    // 忽略 JSON 中多余的字段    isLenient = true            // 允许宽松解析(例如引号)}

val user = json.decodeFromString<User>(jsonString)


Gson 库



Google 的 Gson 是另一个流行的库,尤其在 Android 开发中广泛使用。



添加 Gson 依赖



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


使用示例



import com.google.gson.Gson

data class Product( val id: Int, val title: String, val price: Double)

fun main() { val gson = Gson() // 序列化 val product = Product(1, "笔记本电脑", 999.99) val json = gson.toJson(product) println(json) // 反序列化 val jsonString = """{"id":2,"title":"鼠标","price":29.99}""" val parsedProduct = gson.fromJson(jsonString, Product::class.java) println(parsedProduct.title) // 鼠标}

博客

书籍推荐