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

Kotlin Retrofit协程报错:Expected BEGIN_ARRAY but was BEGIN_OBJECT求助

问题解决:Expected BEGIN_ARRAY but was BEGIN_OBJECT 解析异常

异常原因

你的代码定义API接口直接返回List<Result>,但实际API返回的是包裹数组的JSON对象(比如多数分页接口会返回{"info": {...}, "results": [...]}这类结构)。JSON解析库(Gson/Moshi等)期望接收数组格式([]),但实际收到的是对象格式({}),因此抛出该解析异常。

修复步骤

1. 创建匹配API返回结构的顶层数据类

根据API真实返回的JSON结构,定义对应的顶层数据类(以常见的分页接口为例,可根据实际返回调整字段):

data class CharacterResponse(
    val info: Info?, // 可选字段,根据API实际返回决定是否保留
    val results: List<Result>?
)

// 若API包含info字段,补充该类(不需要可删除)
data class Info(
    val count: Int?,
    val pages: Int?,
    val next: String?,
    val prev: String?
)

2. 修改API接口定义

将接口返回类型从List<Result>改为刚创建的顶层数据类:

interface RMApiService {
    @GET(Constants.END_POINT)
    suspend fun getCharacters(): CharacterResponse
}

3. 更新Repository逻辑

从顶层响应对象中提取出results列表:

class RMRepositoryImpl @Inject constructor(private val api: RMApiService):RMRepository{
    override suspend fun getCharacters(): List<Result> {
        val apiResponse = api.getCharacters()
        // 若results为null,返回空列表避免后续空指针
        return apiResponse.results ?: emptyList()
    }
}

验证

修改完成后重新请求API,解析库会正确匹配外层JSON对象,从中提取results数组进行解析,即可解决该异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:54:23