Kotlin Multiplatform解析JSON遇JsonDecodingException异常求助
问题分析与解决
核心问题:SpaceX目标API返回的是JSON数组格式(
[...]),但你的代码尝试把它反序列化成单个RocketLaunch对象(JSON对象格式{...}),这就触发了解码异常。修复步骤:
修正反序列化接收类型:把API调用的返回类型从
RocketLaunch改成List<RocketLaunch>,示例代码如下:// 错误写法(接收单个对象) // val launch: RocketLaunch = client.get("目标API地址") // 正确写法(接收数组列表) val launches: List<RocketLaunch> = client.get("目标API地址")注:如果是调用返回单个对象的接口(比如
/launches/latest),先确认接口返回确实是单个JSON对象;但根据报错信息,你大概率调用了返回数组的接口。确保数据类序列化配置正确:
RocketLaunch的@Serializable注解要正确,且字段要和API返回的结构匹配,示例:@Serializable data class RocketLaunch( val id: String, val name: String, val date_utc: String, // 补充其他和API返回对应的字段 )检查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
相关产品推荐
相关产品推荐

