使用 Kotlinx Serialization 库解析网络请求中的 JSON 数据

我们在进行 Android 开发时,通常习惯使用著名的 GSONMoshi 库,配合 Retrofit 来解析来自 API 或网络请求的 JSON 数据。但是,对于 Kotlin 项目来说,这种方式正逐渐变得过时,因为 Kotlin 的创造者 JetBrains 发布了 kotlinx.serialization。这是一个 Kotlin 优先的跨平台 JSON 数据序列化库。kotlinx.serialization 完全由纯 Kotlin 编写,可用于所有 Kotlin Multiplatform 目标平台,包括 Kotlin/Native 和 Kotlin/JS。它能让我们轻松地将 JSON 序列化/反序列化为类型安全的 Kotlin 对象,反之亦然。

为什么选择 Kotlin Serialization 库而不是 Moshi 和 Gson:

  • 通过代码生成,在运行时性能上比 Gson 和 Moshi(反射模式)更快。
  • 使用编译器插件而不是注解处理器,构建速度比 Moshi 更快。
  • 与 Gson 相比,对 Kotlin 类型系统有更好的支持,包括对可空类型和默认值的支持。
  • 通过使用独立的库模块,支持多种编码格式。

在本文中,我们将看看如何在自己的项目中使用它,配合 Retrofit 库来解析来自 API 或网络请求的 JSON 数据。

添加 Kotlin Serialization 库及用于 Kotlin Serialization 的 Retrofit 转换器:

首先,打开项目级的 build.gradle 文件,在 dependencies 块中添加 Kotlin Serialization 的 classpath:

dependencies {
  // Other classpath declarations
  classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}

现在,打开应用级的 build.gradle 文件,在文件顶部的 plugins 块中应用该插件:

plugins {
    // Other plugins...
    id ‘kotlinx-serialization‘
}

接下来,在 dependencies 块中添加依赖项:

dependencies {
  // Other dependencies...
  
  // Kotlinx Serialization dependency
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2"
  
  // Retrofit kotlin-serialzation-converter
  // 它允许 Retrofit 使用 Kotlin Serialization 库来转换 API 请求和响应。
  implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0"
}

现在,让我们首先看看如何使用 kotlinx.serialization 将 JSON 数据映射到 Kotlin data/pojo 类:

我们以以下 JSON 对象为例,我们将把它转换为 Kotlin data/pojo 类。

{
    “course_name”:”Modern Android Development”,
    “course_img”:”https://media.geeksforgeeks.org/wp-content/cdn-uploads/20210215201419/Android-Tutorial.png%E2%80%9D,
    “courseMode”:”Online Batch”,
    “courseTracks”:”8 Tracks”
    "is_course_freely_available": true
}

Kotlin Serialization 库会为带有 @Serializable 注解的类生成序列化器。序列化器是一个处理对象序列化和反序列化的类,针对每一个带有 @Serializable 注解的类。而 @SerialName 注解允许你为 Kotlin 对象指定一个自定义名称。因此,如果你不想为 Kotlin 对象使用与 JSON 字段相同的名称……那么请使用 @SerialName("actualjsonfieldnamehere") 注解,将对象映射为与 JSON 字段名称不同的名称。

Kotlin Data class 或 POJO class:

Kotlin


CODEBLOCK_13f7aed6

在上面的代码中,我们已经在 Kotlin data class 中映射了 JSON 数据。

为 Retrofit 创建 JSON 转换器工厂

现在,无论你在哪里构建 Retrofit 实例,都要像这样构建它:

Kotlin


CODEBLOCK_101e657d

上面的代码创建了 kotlinxConverterFactory 对象,作为一个使用 JSON 的转换器工厂,并将其添加到了 Retrofit 实例中。这样 Retrofit 就可以通过 JSON 对象与 API 进行通信。就这样,通过这种方式,你可以轻松地在 Retrofit 中使用 Kotlinx.Serialization 库来代替 GSON & Moshi 解析 JSON 数据。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/43483.html
点赞
0.00 平均评分 (0% 分数) - 0