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

如何正确序列化含字符串数组的JSON文件?Kotlin序列化报错解决

解决kotlinx.serialization解析数组JSON的类型不匹配问题

问题根源

你提供的JSON是直接的字符串数组(格式为["url1", "url2"]),但定义的ShibePhoto数据类要求解析一个包含photos字段的对象结构(JSON需以{开头)。解析器期望对象起始符{,实际却读到数组起始符[,因此抛出类型不匹配的解码异常。

两种解决办法

方法1:直接解析为List

不需要自定义数据类,直接将JSON解析成List<String>类型即可,完全适配当前的数组格式:

import kotlinx.serialization.Json
import kotlinx.serialization.decodeFromString

// 你的JSON字符串
val shibeJson = """["https://cdn.shibe.online/shibes/3f47b1c848763f156778015a20da91b5f365ea93.jpg","https://cdn.shibe.online/shibes/22ee83228be55bce16bc8c6e91790700229892b9.jpg"]"""

// 直接解析为字符串列表
val photoUrls: List<String> = Json.decodeFromString(shibeJson)

方法2:调整JSON结构匹配数据类(若API可修改)

如果能控制返回的JSON格式,将其修改为包含photos字段的对象结构,就能继续使用你定义的ShibePhoto类:
修改后的JSON示例:

{
  "photos": [
    "https://cdn.shibe.online/shibes/3f47b1c848763f156778015a20da91b5f365ea93.jpg",
    "https://cdn.shibe.online/shibes/22ee83228be55bce16bc8c6e91790700229892b9.jpg"
  ]
}

此时原ShibePhoto类的解析代码可以正常运行:

val photos: ShibePhoto = Json.decodeFromString(shibeJson)

总结

如果无法修改JSON格式,优先选择方法1,这是最直接适配现有数据结构的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:42:14