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
相关产品推荐
相关产品推荐

