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

Kotlin新手求助:如何解决java.lang.IllegalStateException解析错误?

问题求助:Retrofit解析报错Expected BEGIN_ARRAY but was BEGIN_OBJECT

我是Kotlin新手,遇到了如下解析错误:

Error:java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

相关信息

API响应

API返回的是JSON对象(最外层由{}包裹),内部包含一个数据数组字段(比如data)。

Retrofit接口定义

接口当前定义为直接返回数据类的列表:

interface ApiService {
    @GET("xxx")
    suspend fun getUsers(): List<User>
}

数据类定义

对应数组元素的结构:

data class User(
    val id: Int,
    val name: String,
    val email: String
)

问题原因

这个错误的核心是:你配置的解析器(比如Gson)期望接收一个JSON数组([]),但实际API返回的是一个JSON对象({}),结构不匹配导致解析失败。

解决方法

  1. 新增包裹数据类,匹配API返回的对象结构:
// 对应API的外层对象结构
data class ApiResponse(
    val data: List<User>, // 对应API里的数组字段
    val code: Int,
    val message: String
)
  1. 修改Retrofit接口的返回类型:
interface ApiService {
    @GET("xxx")
    suspend fun getUsers(): ApiResponse
}
  1. 调用接口时提取数组数据:
val apiResponse = apiService.getUsers()
val userList = apiResponse.data
// 后续处理userList即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:45:58