如何使用Moshi和Reform将非结构化JSON转换为POJO



我遇到了一个问题,我们得到的一些响应无法直接解析并转换为POJO。我得到的回复格式如下

[
"list",
[
{
"@type": "com.exampe.model.ModelName",
"number": 1,
"name": "Test Name",
"url": "/test/url/",
"type": "f"
}
]
]

我想忽略";列表";并解析对象ModelName列表中的POJO。我正在使用改装和Moshi转换器,但我不确定如何实现这一点。有没有什么方法可以在响应传递给Moshi Convertor之前拦截它,或者我可以采用任何不同的方法。

改装Snippet

private fun getRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl(BuildConfig.API_URL)
.addConverterFactory(MoshiConverterFactory.create())
.client(getHTTPClient())
.build()
}

Retrofit提供自定义转换器(请参阅官方文档(,moshi也应该提供类似的功能。

我没有使用moshi的经验,但我检查了文档和源代码——看起来这是可能的。

Moshi提供自定义适配器,可以执行您需要的操作。看看PolymorphicJsonAdapterFactory,它有方法fromJson()toJson(),允许您以自己喜欢的方式手动解析json元素。

甚至更多。PolymorphicJsonAdapterFactory看起来是您需要的一个选项。

JsonAdapter工厂,用于包含中类型信息的对象JSON。解码JSON时。Moshi使用此类型信息确定要解码到哪个类。对Moshi进行编码时使用。这个对象的类,以确定要包含的类型信息。

最新更新