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

Swift解码双层嵌套JSON数组报Expected to decode Array错误如何解决

报错原因
  • 你定义的Codable结构体结构与实际JSON结构不匹配:JSON根节点下的itenaries字段是字典类型,而你在Itenaries结构体中将itenaries声明为[[Days]]数组类型,因此解码时抛出「期望解码Array但找到dictionary」的错误。
  • 实际JSON层级为:根节点 → itenaries字典对象 → 字典内的days字段才是双层嵌套数组,数组元素为行程项对象。
正确解码实现

修正后的Codable结构体

// 匹配JSON根节点结构
struct RootResponse: Codable {
    let itenaries: ItenariesInfo
}

// 匹配itenaries字典的结构
struct ItenariesInfo: Codable {
    let days: [[Days]]
}

// 原行程项模型无需修改
struct Days : Codable {
    let itenary_id : Int
    let itenary_location_name : String
}

修正后的解码代码

let decoder = JSONDecoder()
do {
    let result = try decoder.decode(RootResponse.self, from: fileData)
    // 按层级访问数据即可
    print(result.itenaries.days[0][0].itenary_id)
} catch {
    print("解码失败: \(error.localizedDescription)")
}
可选优化

你可以开启JSONDecoder的下划线转驼峰策略,让属性命名更符合Swift规范,无需修改JSON对应键:

// 解码器配置
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase

// 对应修改模型属性命名
struct Days : Codable {
    let itenaryId: Int
    let itenaryLocationName: String
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:48:02