Kotlin 中的 JSON 处理:库、解析与序列化

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

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

开始课程

在 Kotlin 中处理 JSON:完整指南



JSON(JavaScript 对象表示法)仍然是 Web 开发、移动应用和微服务中最流行的数据交换格式之一。Kotlin 作为面向 JVM、Android 和多平台项目的现代语言,提供了多种强大的工具来处理 JSON。在本文中,我们将详细解析主要库、它们的特性以及最佳实践。



为什么在 Kotlin 中需要 JSON 库?

虽然 Kotlin 运行在 JVM 上并且可以使用 Java 库,但原生 Kotlin 解决方案(例如 kotlinx.serialization)提供了:

  • 编译时的类型安全
  • 对数据类和密封类的支持
  • 多平台能力(KMP)
  • 最少的样板代码


Kotlin 中处理 JSON 的主要库



1. kotlinx.serialization(推荐)

这是 JetBrains 的官方库,内置于 Kotlin 生态系统中。它支持多平台且不需要反射机制。

配置(Gradle):

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

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


JSON 解析示例:

import kotlinx.serialization.*import kotlinx.serialization.json.*

@Serializabledata class User( val id: Int, val name: String, val email: String, @SerialName("is_active") val isActive: Boolean = false)

fun main() { val jsonString = """ { "id": 1, "name": "Иван Петров", "email": "ivan@example.com", "is_active": true } """.trimIndent()

val user = Json.decodeFromString<User>(jsonString) println("用户:${user.name},活跃状态:${user.isActive}")

// 序列化回 JSON val jsonOutput = Json.encodeToString(user) println(jsonOutput)}


2. Gson(来自 Google)

流行的 Java 库,易于适配 Kotlin。适用于不需要多平台支持的简单项目。

示例:

import com.google.gson.Gsonimport com.google.gson.annotations.SerializedName

data class Product( @SerializedName("product_id") val id: Int, val title: String, val price: Double)

fun main() { val gson = Gson() val json = """{"product_id": 101, "title": "Ноутбук", "price": 79999.99}""" val product = gson.fromJson(json, Product::class.java) println("商品:${product.title},价格:${product.price} 卢布") // 反向序列化 val jsonOut = gson.toJson(product) println(jsonOut)}


3. Moshi(来自 Square)

Gson 的现代替代方案,性能更好且支持 Kotlin 代码生成。

示例:

import com.squareup.moshi.Moshiimport com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactoryimport com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory

data class Book( val isbn: String, val author: String, val year: Int)

fun main() { val moshi = Moshi.Builder() .add(KotlinJsonAdapterFactory()) .build() val adapter = moshi.adapter(Book::class.java) val json = """{"isbn": "978-5-17-123456-7", "author": "Лев Толстой", "year": 1877}""" val book = adapter.fromJson(json) println("书籍:${book?.author} - ISBN:${book?.isbn}")}


库的对比

  • kotlinx.serialization — 新项目、多平台和 Android 的最佳选择。需要编译器插件。
  • Gson — 易于使用,适合快速原型开发

推荐