Kotlin序列化JSON解码异常求助:API返回格式不匹配问题
解决Kotlinx Serialization JSON解码异常($.items字段类型不匹配)
问题根源
报错信息明确指出:$.items位置期望接收对象{,但实际返回的是数组[](从你提供的JSON片段{"items":[{"added_at":"2022-11-30T13:4....."}]}也能看出items是数组结构)。核心问题是你的Music数据类中items字段的类型定义与API返回的JSON结构不匹配——你把它定义成了单个对象类型,而实际需要是列表/数组类型。
修复步骤
修正
Music数据类的items字段类型
假设你之前的错误定义如下:@Serializable data class Music( val items: MusicItem // 错误:单个对象类型,与返回的数组不匹配 )将其改为列表类型:
@Serializable data class Music( val items: List<MusicItem> // 正确:匹配API返回的数组结构 )确保
MusicItem类正确映射子字段
定义MusicItem类来匹配数组中每个元素的结构,比如包含added_at字段:@Serializable data class MusicItem( val added_at: String, // 根据API返回的其他字段补充定义,比如track信息等 )
额外验证点
- 确认API返回的完整JSON结构,如果外层还有其他包装字段(比如
data、response),需要在Music类中对应添加这些字段。 - 检查Retrofit配置是否正确集成了Kotlinx Serialization转换器,示例配置如下:
val retrofit = Retrofit.Builder() .baseUrl("你的API基础地址") .addConverterFactory(Json.asConverterFactory("application/json".toMediaType())) .build() - 确认Retrofit接口方法的返回类型与修正后的
Music类完全一致,避免类型不匹配。
内容的提问来源于stack exchange,提问作者Ravikant sahu
相关产品推荐
相关产品推荐

