首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Moshi与GSON的gson.fromJson()和gson.toJson()等价于什么?

Moshi与GSON的gson.fromJson()和gson.toJson()等价于什么?
EN

Stack Overflow用户
提问于 2021-11-27 18:04:29
回答 2查看 976关注 0票数 0

我遵循这个房间教程,在某一时刻,我们需要为房间创建类型转换器。GSON被用来解析JSON。

为了实现这一点,我们首先创建这个通用接口,它包含两个函数,用于从JSON字符串获取对象或将对象解析为JSON字符串。如果您决定切换到不同的库来解析JSON String,情况就是这样。

代码语言:javascript
复制
interface JsonParser {

    //takes the actual JSON String and return an object of our type
    fun <T> fromJson(json: String, type: Type): T?

    //takes our object and return JSON String
    fun <T> toJson(obj: T, type: Type): String?
}

下一步是创建使用GSON的上述接口的实现。

代码语言:javascript
复制
//JsonParser implementation
class GsonParser (private val gson: Gson):JsonParser {
    override fun <T> fromJson(json: String, type: Type): T? {

        return gson.fromJson(json,type)
    }

    override fun <T> toJson(obj: T, type: Type): String? {
        return gson.toJson(obj,type)
    }
}

就我的情况而言,我也想做同样的事情,但也是针对莫希。不幸的是,Moshi没有toJson()fromJson()方法。

已经尝试寻找与GSON的toJson()fromJson()等效的Moshi方法,但我什么也没有得到。我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-05 08:06:07

我翻阅了@CommonsWare提供的关于他上述评论的@CommonsWare

解决方案是首先将Moshi/Retrofit的依赖项添加到项目中。

代码语言:javascript
复制
// Retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'

    //Moshi Library Dependencies - Core Moshi JSON Library and Moshi's Kotlin support and converter factory
    implementation "com.squareup.moshi:moshi:1.12.0"
    implementation "com.squareup.moshi:moshi-kotlin:1.12.0"

然后创建一个类名MoshiParser,实现JsonParser接口并初始化Moshi。要使Moshi的注释与Kotlin一起正常工作,只需在Moshi上添加KotlinJsonAdapterFactory即可。

下一个项目是使用Moshi的JsonAdapter,它采用了<T>的泛型类型。JsonAdpater提供JsonAdpater.toJson()JsonAdapter.fromJson()

代码语言:javascript
复制
class MoshiParser() : JsonParser {

    //initialize Moshi
    private val moshi: Moshi = Moshi.Builder()
            .add(KotlinJsonAdapterFactory())
            .build()


    override fun <T> fromJson(json: String, type: Type): T? {
        
        //use jsonAdapter<T> for generic adapter
        val jsonAdapter: JsonAdapter<T> = moshi.adapter(type)
        return jsonAdapter.fromJson(json)

    }

    override fun <T> toJson(obj: T, type: Type): String? {

    //use jsonAdapter<T> for generic adapter
        val jsonAdapter: JsonAdapter<T> = moshi.adapter(type)

        return jsonAdapter.toJson(obj)
    }

}
票数 1
EN

Stack Overflow用户

发布于 2022-06-04 05:05:55

我的分机是用Moshi来处理这件事

代码语言:javascript
复制
/*
* [Moshi] extension to transform an object to json
* */
inline fun <reified T> Moshi.objectToJson(data: T): String =
    adapter(T::class.java).toJson(data)

/*
* [Moshi] extension to transform json to an object
* */
inline fun <reified T> Moshi.jsonToObject(json: String): T? =
    adapter(T::class.java).fromJson(json)

您可以在gist - 要点链接上找到更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70137406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档