You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moshi中与GSON的gson.fromJson()、gson.toJson()等效的方法是什么

实现方案

Moshi 没有直接提供全局的 fromJson/toJson 方法,它的设计是先根据目标类型获取对应的 JsonAdapter 实例,再通过该实例完成序列化、反序列化操作,你可以按以下方式实现 JsonParser 接口:

完整实现代码

import com.squareup.moshi.Moshi
import java.lang.reflect.Type

class MoshiParser(private val moshi: Moshi) : JsonParser {
    override fun <T> fromJson(json: String, type: Type): T? {
        return try {
            val adapter = moshi.adapter<T>(type)
            adapter.fromJson(json)
        } catch (e: Exception) {
            // 解析异常时返回null,和原有Gson实现行为对齐
            null
        }
    }

    override fun <T> toJson(obj: T, type: Type): String? {
        return try {
            val adapter = moshi.adapter<T>(type)
            adapter.toJson(obj)
        } catch (e: Exception) {
            // 序列化异常时返回null,和原有Gson实现行为对齐
            null
        }
    }
}

使用注意事项

  • 初始化 Moshi 实例时如果是 Kotlin 项目,需要引入 moshi-kotlin 扩展,并添加 KotlinJsonAdapterFactory 保证 Kotlin 类的解析正常,示例初始化代码:
val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    // 按需添加其他自定义Adapter
    .build()
val jsonParser = MoshiParser(moshi)
  • 如果你需要保留未知字段、或者放宽解析规则,可以在初始化 JsonAdapter 时调用 .lenient() 方法,修改对应逻辑为 moshi.adapter<T>(type).lenient() 即可。
  • 原有 JsonParser 接口不需要做任何修改,替换实现类后就可以无缝切换到Moshi,不影响上层ROOM类型转换器的逻辑。

内容的提问来源于stack exchange,提问作者Tonnie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:15:05