Kotlin 中的 JSON 处理:库与代码示例

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

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

开始课程

Kotlin 中的 JSON 处理:库、工具与代码示例



JSON(JavaScript Object Notation)是现代 Web 开发中最流行的数据交换格式之一。在使用 Kotlin 开发应用时(无论是 Android、后端还是桌面应用),几乎总是需要解析和生成 JSON。本文将详细介绍 Kotlin 中用于处理 JSON 的主要库、它们的特性、优势,并提供实用的代码示例。



为什么需要在 Kotlin 中单独处理 JSON?



Kotlin 是一种静态类型语言,运行在 JVM(以及 Native 和 JS)之上。与动态语言不同(动态语言可以“即时”将 JSON 转换为字典),Kotlin 通常使用类型化对象进行操作。这提高了代码的可靠性,并允许 IDE 自动提示字段。为了将 JSON 转换为 Kotlin 对象(data 类)以及反向转换,需要使用序列化/反序列化库。



Kotlin 中主要的 JSON 库



我们将介绍三个最流行的库:kotlinx.serialization(JetBrains 推荐)、Gson(来自 Google)和 Moshi(来自 Square)。



1. kotlinx.serialization



这是 JetBrains 支持的官方 Kotlin 序列化库。它基于多平台(JVM、Native、JS)运行,不使用反射,从而提供高性能和类型安全。



安装:在 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.Serializableimport kotlinx.serialization.json.Jsonimport kotlinx.serialization.encodeToStringimport kotlinx.serialization.decodeFromString

@Serializabledata class User(val name: String, val age: Int, val email: String? = null)

fun main() { val json = Json { prettyPrint = true; ignoreUnknownKeys = true }

// 序列化(对象 -> JSON) val user = User("阿列克谢", 30, "alex@example.com") val jsonString = json.encodeToString(user) println(jsonString)

// 反序列化(JSON -> 对象) val input = """{"name":"玛丽亚","age":25}""" val parsedUser = json.decodeFromString<User>(input) println(parsedUser)}


特性:

  • 支持可空字段(如示例中的 email)。
  • 通过 DSL 进行配置:prettyPrint、ignoreUnknownKeys 等。
  • 支持枚举、密封类、嵌套对象。
  • 多平台支持——同一套代码可用于 Android、iOS、Web。


2. Gson



Gson 是 Google 的经典库,在 Java 世界中广泛使用。它在 Kotlin 中也能工作,但需要谨慎处理可空类型和 data 类。



安装:



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


示例:



import com.google.gson.Gsonimport com.google.gson.GsonBuilder

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

fun main() { val gson: Gson = GsonBuilder().setPrettyPrinting().create()

// 序列化 val product = Product(1, "笔记本电脑", 89999.99) val json = gson.toJson(product) println(json)

// 反序列化 val jsonString = """{"id":2,"title":"鼠标","price":1500.50}""" val parsed = gson.fromJson(jsonString, Product::class.java) println(parsed)}


重要提示:Gson 使用反射,因此对于 Kotlin data 类,可能需要 @JvmOverloads 或配置

推荐