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

Kotlin Multiplatform解析JSON遇JsonDecodingException异常求助

问题分析与解决
  • 核心问题:SpaceX目标API返回的是JSON数组格式([...]),但你的代码尝试把它反序列化成单个RocketLaunch对象(JSON对象格式{...}),这就触发了解码异常。

  • 修复步骤:

    1. 修正反序列化接收类型:把API调用的返回类型从RocketLaunch改成List<RocketLaunch>,示例代码如下:

      // 错误写法(接收单个对象)
      // val launch: RocketLaunch = client.get("目标API地址")
      
      // 正确写法(接收数组列表)
      val launches: List<RocketLaunch> = client.get("目标API地址")
      

      注:如果是调用返回单个对象的接口(比如/launches/latest),先确认接口返回确实是单个JSON对象;但根据报错信息,你大概率调用了返回数组的接口。

    2. 确保数据类序列化配置正确:RocketLaunch的@Serializable注解要正确,且字段要和API返回的结构匹配,示例:

      @Serializable
      data class RocketLaunch(
          val id: String,
          val name: String,
          val date_utc: String,
          // 补充其他和API返回对应的字段
      )
      
    3. 检查HttpClient的序列化配置:确认ContentNegotiation插件正确配置了JSON序列化器,建议开启忽略未知字段避免额外报错:

      val client = HttpClient {
          install(ContentNegotiation) {
              Json(Json {
                  ignoreUnknownKeys = true
                  prettyPrint = true
              })
          }
      }
      
  • 额外排查建议:

    • 直接访问你调用的API地址,确认返回的是数组还是单个对象,保证代码接收类型和实际返回一致。
    • 核对序列化插件和依赖版本:你的插件版本是1.8.10,确保kotlinx-serialization-json依赖版本和Kotlin版本匹配,避免版本不兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:27:11