ITmob-Ly
发布于 2024-03-07 / 190 阅读
0

Kotlin 中的 JSON 解析:序列化和反序列化

Kotlin-Blog

介绍

本文我们将探讨 Kotlin 如何解析 JSON 数据,如:包括 JSON 的序列化和反序列化,Kotlin 中官方提供了 kotlinx.serialization 库用于 JSON 解析。

什么是 JSON?

JSON (JavaScript Object Notation) 是一种完全独立于具体编程语言的文本格式,易于阅读和编写,也易于计算机解析。JSON 是一种用于存储和传输数据的轻量级格式,当需要在服务器、网页、应用程序间传输数据时,通常会使用 JSON 格式的数据来传输。

JSON 示例

这个示例定义了一个books对象,它是包含3个图书对象的数组:

{
  "books": [
    {
      "title": "Sample Book 1",
      "author": "ITmob",
      "language": "English",
      "pages": 200,
      "link": "https://itmob.cn",
    },
    {
      "title": "Sample Book 2",
      "author": "ITmob",
      "language": "English",
      "pages": 200,
      "link": "https://itmob.cn",
    },
    {
      "title": "Sample Book 3",
      "author": "ITmob",
      "language": "English",
      "pages": 200,
      "link": "https://itmob.cn",
    }
  ]
}

Kotlin 中的 JSON 处理

在 Kotlin 中,通过 kotlinx.serialization 库可以轻松解析和序列化 JSON 数据。

1. 添加需要的库

添加序列化 Gradle 插件:org.jetbrains.kotlin.plugin.serialization 或 Gradle DSL 中的 kotlin("plugin.serialization")

plugins {
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.22'
}

kotlinx.serialization 库添加到项目中:

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0'
}

2. 在 Kotlin 中解析/反序列化 JSON

使用 kotlinx.serialization 解析/反序列化 JSON 字符串非常简单。

通过使用 @Serialized 注解来使类可序列化,并使用 decodeFromString() 函数将 JSON 字符串反序列化为该 Book 类的实例。

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

@Serializable
data class Book(val title: String, val author: String)

fun main() {
    val json = """{"title":"Example Title", "author": "itmob.cn"}"""
    val book = Json.decodeFromString<Book>(json)
    println(book)
}
// 输出:Book(title=Example Title, author=itmob.cn)

3. 在 Kotlin 中序列化 JSON

在 Kotlin 中序列化 JSON 也同样简单。使用 encodeToString 函数将 Book 对象序列化为 JSON 字符串。

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

@Serializable
data class Book(val title: String, val author: String)

fun main() {
    val book = Book("Example Title", "itmob.cn")
    val json = Json.encodeToString(book)
    println(json)
}
// 输出:{"title":"Example Title","author":"itmob.cn"}

有关 Kotlin 中序列化的更多信息,请参阅 Kotlin 序列化指南