Kotlin JSON:从零到专家的解析指南

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

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

开始课程

引言:为什么 Kotlin 中的 JSON 既是痛苦也是快乐

\n

如果您曾经为 Android 或后端编写过 Kotlin 代码,您一定遇到过 JSON。它就像现代开发者的空气:API、配置文件、数据库——一切都在用这种语言交流。但矛盾的是:Stack Overflow 上关于 "How to parse JSON in Kotlin?" 的问题每月都有数千次浏览。为什么?因为在 Kotlin 中,与 Java 不同,有 null safety,而像 Gson 这样的旧库开始“表现异常”。

\n

在本教程中,我们将从简单到复杂逐步讲解 Kotlin 中的 JSON 解析。您将学习如何使用 Kotlinx Serialization、Moshi 和经典的 Gson。我们将编写可以直接复制到项目中的真实代码。开始吧!

\n\n
\n\n

什么是 JSON,为什么 Kotlin 不能立即与之友好相处?

\n

JSON (JavaScript Object Notation) 是一种文本数据交换格式。它看起来像这样:

\n
{\n  "name": "Kotlin",\n  "year": 2011,\n  "features": ["null safety", "coroutines"]\n}
\n

看起来,这能出什么问题呢?但 Kotlin 有严格的类型系统和 null safety。当您解析 JSON 时,必须明确指定哪些字段可以是 null,哪些是必需的。如果库没有考虑到这一点,您就会遇到 NullPointerException 或奇怪的错误。

\n

因此,为 Kotlin 中的 JSON 解析 选择正确的库不仅仅是“口味问题”,而是关系到项目的稳定性。

\n\n

Kotlin 中 JSON 解析的三大库

\n

我们将介绍三种主要方法。每种方法都有其优缺点。

\n
    \n
  • Kotlinx Serialization — JetBrains 的官方库。与语言集成最佳。
  • \n
  • Moshi — Square 的现代库。同时支持 Java 和 Kotlin。
  • \n
  • Gson — 经典的老牌标准。仍然很流行,但在 Kotlin 中需要谨慎使用。
  • \n
\n\n

1. Kotlinx Serialization — 专业之选

\n

这是 Kotlin 的原生库。它使用代码生成并完全支持 null safety。如果您在 Kotlin 中启动新项目,这是您的选择。

\n

安装: 在 build.gradle.kts 中添加插件:

\n
plugins {\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
import kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n    val name: String,\n    val year: Int,\n    val features: List<String>\n)\n\nfun main() {\n    val jsonString = """\n        {\n            "name": "Kotlin",\n            "year": 2011,\n            "features": ["null safety", "coroutines"]\n        }\n    """.trimIndent()\n\n    val user = Json.decodeFromString<User>(jsonString)\n    println(user.name) // Kotlin\n    println(user.features[0]) // null safety\n}
\n

请注意:Kotlinx Serialization 会自动识别类型。如果 JSON 中缺少某个字段,而 data class 中该字段未标记为 nullable,您将收到异常。这很好——您不会错过错误。

\n\n

2. Moshi — 灵活且快速

\n

Moshi 是 Square 的库,专为 Kotlin 设计。它也支持代码生成和 null safety。与 Gson 不同,Moshi 默认不使用反射,因此速度更快。

\n

安装:

\n
dependencies {\n    implementation("com.squareup.moshi:moshi-kotlin:1.15.0")\n    ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")\n}
\n

代码示例:

\n
im                

博客

书籍推荐