Kotlin中的JSON处理:库与使用示例

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

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

开始课程

Kotlin中的JSON处理:库概览与实践示例



JSON(JavaScript Object Notation)仍然是客户端与服务器之间最流行的数据交换格式之一。在广泛用于Android应用开发和服务器端解决方案的Kotlin语言中,有多个强大的库可用于处理JSON。本文将详细讲解主要工具:kotlinx.serialization、Gson、Moshi和Klaxon。您将学习如何解析JSON、序列化对象以及高效处理数据。



1. kotlinx.serialization —— JetBrains的原生方案



kotlinx.serialization是Kotlin官方团队开发的库。其主要优势在于与语言类型系统的完全集成以及对多平台(KMM)的支持。使用时需要在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.Json

@Serializabledata class User(val id: Int, val name: String, val email: String)

fun main() { val jsonString = """{"id":1,"name":"安娜","email":"anna@example.com"}""" // 反序列化 val user = Json.decodeFromString<User>(jsonString) println("用户:${user.name}, 邮箱:${user.email}") // 序列化 val output = Json.encodeToString(user) println(output)}


特点:

  • 无需反射(在编译阶段工作)。
  • 支持自定义序列化器和多态。
  • 非常适合Kotlin Multiplatform Mobile。


2. Gson —— Google的经典库



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 json = """{"id":101,"title":"笔记本电脑","price":79990.0}""" // 解析 val product = gson.fromJson(json, Product::class.java) println("商品:${product.title}, 价格:${product.price}") // 反向转换 val newJson = gson.toJson(product) println(newJson)}


优点与缺点:

  • + 基本场景代码量最少。
  • + 支持@SerializedName注解进行字段映射。
  • - 使用反射可能降低性能。
  • - 处理null和泛型类型时存在问题。


3. Moshi —— Square的现代替代方案



Moshi被设计为更安全、更快的Gson替代品。它也使用反射,但通过@JsonClass注解提供代码生成功能。添加依赖:



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


使用代码生成的示例:



import com.squareup.moshi.JsonClassimport com.squareup.moshi.Moshi

@JsonClass(generateAdapter = true)data class Book(val isbn: String, val author: String, val year: Int)

fun main() { val moshi = Moshi.Builder().build() val adapter = moshi.adapter(Book::class.java) val json = """{"isbn":"978-5-17-123456-7","autho

推荐