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

Kotlin中使用Retrofit获取Perenual API响应内的嵌套数组

解决Retrofit解析Perenual API响应的错误

你的推测完全正确,错误就是因为API返回的顶层结构是对象,而你直接尝试解析成数组导致的。解决方法是创建一个对应整个响应结构的顶层数据类,然后从中提取data字段的植物数组,具体步骤如下:

1. 创建顶层响应数据类

新增一个SpeciesListResponse.kt文件,定义包含data数组和其他分页信息的数据类:

data class SpeciesListResponse(
    @SerializedName("data")
    val plantList: List<SpeciesListPlant>,
    @SerializedName("to")
    val to: Int,
    @SerializedName("per_page")
    val perPage: Int,
    @SerializedName("current_page")
    val currentPage: Int,
    @SerializedName("from")
    val from: Int,
    @SerializedName("last_page")
    val lastPage: Int,
    @SerializedName("total")
    val total: Int
)

(注:如果不需要分页信息,也可以只保留data字段,但建议完整对应响应结构,方便后续扩展)

2. 修改API接口的返回类型

更新SpeciesListInterface.kt中的方法,返回类型改为Call<SpeciesListResponse>:

interface SpeciesListInterface {
    @GET(ApiConstants.SPECIES_LIST_ENDPOINT_PERENUAL)
    fun getSpeciesList(): Call<SpeciesListResponse>
}

3. 调整Retrofit回调逻辑

修改调用代码中的回调类型,在onResponse中提取data字段的植物列表:

val retrofitBuilder = Retrofit.Builder()
        .addConverterFactory(GsonConverterFactory.create())
        .baseUrl(ApiConstants.BASE_URL_PERENUAL)
        .build()
        .create(SpeciesListInterface::class.java)

val retrofitData = retrofitBuilder.getSpeciesList()

retrofitData.enqueue(object : Callback<SpeciesListResponse?> {
    override fun onResponse(call: Call<SpeciesListResponse?>, response: Response<SpeciesListResponse?>) {
        response.body()?.let { responseData ->
            val plantList = responseData.plantList
            Log.e("Retrofit data", plantList.toString())
            // 这里可以使用plantList做后续处理,比如更新UI
        }
    }

    override fun onFailure(call: Call<SpeciesListResponse?>, t: Throwable) {
        t.printStackTrace()
    }
})

这样修改后,Gson会先解析整个顶层响应对象,你就能通过responseData.plantList获取到嵌套在data字段里的植物数组,解决解析错误的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:14:51