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对象({}),结构不匹配导致解析失败。
解决方法
- 新增包裹数据类,匹配API返回的对象结构:
// 对应API的外层对象结构 data class ApiResponse( val data: List<User>, // 对应API里的数组字段 val code: Int, val message: String )
- 修改Retrofit接口的返回类型:
interface ApiService { @GET("xxx") suspend fun getUsers(): ApiResponse }
- 调用接口时提取数组数据:
val apiResponse = apiService.getUsers() val userList = apiResponse.data // 后续处理userList即可
内容的提问来源于stack exchange,提问作者Baris evik
相关产品推荐
相关产品推荐

