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

Kotlin序列化JSON解码异常求助:API返回格式不匹配问题

解决Kotlinx Serialization JSON解码异常($.items字段类型不匹配)

问题根源

报错信息明确指出:$.items位置期望接收对象{,但实际返回的是数组[](从你提供的JSON片段{"items":[{"added_at":"2022-11-30T13:4....."}]}也能看出items是数组结构)。核心问题是你的Music数据类中items字段的类型定义与API返回的JSON结构不匹配——你把它定义成了单个对象类型,而实际需要是列表/数组类型。

修复步骤

  1. 修正Music数据类的items字段类型
    假设你之前的错误定义如下:

    @Serializable
    data class Music(
        val items: MusicItem // 错误:单个对象类型,与返回的数组不匹配
    )
    

    将其改为列表类型:

    @Serializable
    data class Music(
        val items: List<MusicItem> // 正确:匹配API返回的数组结构
    )
    
  2. 确保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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:08