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

Swift调用Unsplash API返回数据但JSON解析提示数据缺失如何解决

问题原因排查

首先可以排除API密钥使用错误:如果密钥无效或权限异常,Unsplash会返回401未授权响应,返回的data会是错误提示JSON,不会触发解析Photo数组时的字段缺失报错。

当前报错的核心原因是你定义的Photo结构体和Unsplash API返回的JSON结构不匹配:

  • Unsplash返回的alt_description字段允许为空,你将其定义为非可选的String类型,当接口返回该字段为null时,JSONDecoder会直接抛出数据缺失的错误。
  • 你当前打印的error.localizedDescription信息过于模糊,无法直接定位问题,建议打印完整的error对象即可看到具体是哪个字段解析失败。
修复方案

1. 修改Photo结构体

将alt_description调整为可选类型即可解决当前报错:

struct Photo: Identifiable, Decodable {
    var id: String
    var alt_description: String? // 改为可选类型,兼容空值场景
    var urls: [String: String]
}

如果需要更安全的类型校验,也可以将urls字段定义为明确的结构体,避免后续取值时的类型判断:

struct Photo: Identifiable, Decodable {
    struct Urls: Decodable {
        let raw: String
        let full: String
        let regular: String
        let small: String
        let thumb: String
    }
    var id: String
    var alt_description: String?
    var urls: Urls
}

2. 优化错误打印逻辑

调整catch块的错误打印内容,方便后续排查其他解析问题:

catch {
    print("解析错误: \(error)")
}

3. 额外注意事项

你当前使用@ObservedObject声明randomImages,需要确保UnsplashData类遵循ObservableObject协议,且存储数据的photoArray属性添加了@Published修饰,否则数据更新后无法触发UI刷新。

内容的提问来源于stack exchange,提问作者Justin Philip Fulkerson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:57:00