Moshi 是 Square(和 Retrofit/OkHttp 同门)出品的 JSON 解析库,专为 Kotlin 设计。简单说就是Gson 的 Kotlin 升级版。
Kotlin data class 扔给 Gson 和 Moshi,看看区别在哪:
两者都是把 JSON 字符串 ⟷ Kotlin 对象互转的库,核心区别在实现方式:
Gson(Google):用 Java 反射在运行时动态解析。写起来简单,但碰到 Kotlin data class 的默认值、非空类型这些特性时就容易踩坑——比如 JSON 里少了一个字段,Gson 可能不会用你写的= ""默认值,而是塞个 null 进去导致空指针。
Moshi(Square):通过 KSP 在编译期就生成好适配器代码,不依赖反射。它天生理解 Kotlin:
val name: String就严格按照非空处理,null 直接报错让你发现数据问题val name: String = ""的默认值一定生效- 多余字段可以配置严格模式报错,避免静默丢数据
在这个项目里选 Moshi 的原因很实际:
| Gson | Moshi | |
|---|---|---|
| 注解 | @SerializedName("xxx") | @field:Json(name = "xxx") |
| 注解处理器 | kapt(慢) | KSP(编译快 ~2x) |
| 与 Retrofit 集成 | converter-gson | converter-moshi |
| Kotlin 适配 | 靠反射凑合 | 代码生成,类型安全 |
Retrofit + OkHttp + Moshi 都是 Square 家的,三件套配合最紧密。在libs.versions.toml的networkbundle 里也配好了一站式引用。