如何在Kotlin中使用Retrofit2处理动态JSON响应?

时间:2019-07-20 12:15:43

标签: android kotlin retrofit2

我在kotlin中使用restfit2作为rest API,并从服务器获取数据,但是,每次API发送响应时,JSON数据都不相同,也不相同。我想处理动态JSON对象响应。我不知道该怎么做。

我为静态JSON数据创建了数据类,但想要动态。

data class GetDetails(
    var Id: String? = null,
    var UId: String? = null,
    var DOB: String? = null,
    var Name: String? = null,
    var Address: String? = null
)

使用

处理响应
requestCall.enqueue(object : Callback<List<GetDetails>> {

                override fun onResponse(call: Call<List<GetDetails>>, response: Response<List<GetDetails>>) {
...
})

我创建了一个静态数据类,但是,我想处理动态JSON对象响应。我的意思是,当服务器API发送带有4个JSON元素或10个JSON元素或20个JSON元素的响应时。我应该能够处理它。

请帮助我。

3 个答案:

答案 0 :(得分:0)

  

您可以在json中以JsonElement的形式获取响应,然后进行处理

@POST("function/ResizeImage?")
    fun resizeImage(@Query("AppGuid") guid:String,
                      @Query("UserAppGuid") uuid:String,
                      @Query("ImageUrl") imageUrl:String,
                      @Query("Width") width:String,
                    @Query("Height") height:String,
                    @Query("FileName") fileName:String,
                    @Query("FileType") fileType:String): Call<JsonElement>

答案 1 :(得分:0)

对于一个模型处理4个JSON元素到20个JSON元素而言,这只是一个坏习惯。但是,如果要执行此操作,则必须将所有字段都设置为可为空(如果没有任何强制性),并在尝试访问每个字段时检查每个字段的onResponse是否为空。

答案 2 :(得分:0)

如果您的JSON响应是动态变化的,则可以将JSON存储为键值对(Map )并使用您已知的键。

在kotlin中,您还可以将类委托属性存储在地图中

try link here

Documentation here