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

Swift使用Codable解析JSON数组时报错,无法输出解码后数据

问题根因

你遇到的解码失败是由以下两个核心问题导致的:

  • Codable属性与JSON键名不匹配
    JSON返回的下载链接字段键名为download_url,而你定义的ImageData结构体中对应的属性名为dataURL,默认Codable解析时会严格匹配字符串,找不到对应键就会抛出解码失败错误。
  • 错误日志输出不全
    你当前的catch块仅打印了通用的解码失败提示,没有输出系统返回的具体错误信息,无法快速定位问题。

修复方案

方案1:直接修改属性名匹配JSON键名

直接把ImageData里的属性名改成和JSON键名一致即可:

struct ImageData: Codable {
    var author: String
    var download_url : String
}

方案2:使用CodingKeys自定义键映射

如果你不想用下划线命名风格,保持驼峰命名的话,可以显式定义CodingKeys做映射:

struct ImageData: Codable {
    var author: String
    var dataURL : String
    
    enum CodingKeys: String, CodingKey {
        case author
        case dataURL = "download_url"
    }
}

额外优化:补充完整错误打印

修改解码逻辑的catch块,打印具体错误信息,方便后续排查其他问题:

func jsonDecode(data: Data) {
    do {
        let decodedData = try decoder.decode([ImageData].self, from: data)
        print("decodedData is \(decodedData)")
    }
    catch {
        print("error on decoding JSON: \(error.localizedDescription)")
        // 开发阶段可以直接打印error查看更详细的错误信息
        print(error)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:09:01