Moshi for Kotlin:完整指南与示例
\n\n1. 什么是 Moshi 以及为什么需要它
\nMoshi 是一个现代化的 JSON 序列化和反序列化库,由 Square 公司开发。它使用 Kotlin 和 Java 编写,但主要面向 Kotlin 开发者。Moshi 提供了一种强大、安全且高效的方式,用于将对象转换为 JSON 以及反向转换,且只需极少的样板代码。
\n为什么需要 Moshi?在现代应用开发中,处理 JSON 是必不可少的一部分:与 REST API 交换数据、存储配置、在组件之间传递消息。Moshi 解决了几个关键问题:自动将 Kotlin 类转换为 JSON(反之亦然),无需手动编写解析器;严格的类型检查,可防止运行时错误;支持不可变对象(data class)和密封类;可通过适配器进行自定义。与 Gson 或 Jackson 相比,Moshi 提供了更简洁的 API、更好的 Kotlin 集成(例如支持空安全性和默认值)以及更小的库体积。
\nMoshi 在注重性能和类型安全性的项目中尤其有用。它广泛应用于 Android 开发(包括与 Retrofit 和 OkHttp 结合使用)、基于 Ktor 的服务器应用,以及任何需要处理 JSON 的 Kotlin 项目。该库支持反射(通过 moshi-kotlin 模块)和代码生成(通过 moshi-kotlin-codegen),允许您在便利性和性能之间进行选择。
2. 安装
\nMoshi 通过 Maven Central 分发。要安装,请将依赖项添加到 build.gradle.kts(Gradle)或 pom.xml(Maven)文件中。
Gradle (Kotlin DSL)
\n// build.gradle.kts\ndependencies {\n // 主库\n implementation("com.squareup.moshi:moshi:1.15.1")\n \n // Kotlin 模块(反射)\n implementation("com.squareup.moshi:moshi-kotlin:1.15.1")\n \n // 代码生成(可选,用于提高性能)\n ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.1")\n // 或 kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.1")\n}\n\n Gradle (Groovy)
\n// build.gradle\ndependencies {\n implementation 'com.squareup.moshi:moshi:1.15.1'\n implementation 'com.squareup.moshi:moshi-kotlin:1.15.1'\n ksp 'com.squareup.moshi:moshi-kotlin-codegen:1.15.1'\n}\n\n Maven
\n<dependency>\n <groupId>com.squareup.moshi</groupId>\n <artifactId>moshi</artifactId>\n <version>1.15.1</version>\n</dependency>\n<dependency>\n <groupId>com.squareup.moshi</groupId>\n <artifactId>moshi-kotlin</artifactId>\n <version>1.15.1</version>\n</dependency>\n\n 重要提示: 如果您使用代码生成,请确保添加 KSP(Kotlin Symbol Processing)或 KAPT 插件。对于 KSP,请在 plugins 中添加:
plugins {\n id("com.google.devtools.ksp") version "1.9.22-1.0.17"\n}\n 3. 快速入门
\n一个最小的工作示例演示了基本的序列化和反序列化。
\n \nimport com.squareup.moshi.Moshi\nimport com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory\n\n// 1. 定义 data class\ndata class User(\n val name: String,\n val age: Int,\n val email: String?\n)\n\nfun main() {\n //