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

Swift使用JSONDecoder解析机场JSON文件时解码报错如何解决?

问题排查与解决

错误原因

  • 你的JSON根结构为[String: Any]类型的字典:键是机场ICAO编码字符串,值是对应机场的属性对象,你直接按照单个AirportData类型解码,和JSON结构不匹配,所以触发解码错误。
  • 你定义的AirportData结构体本身没有问题,Codable会自动忽略JSON中未在结构体中声明的多余字段,不需要修改。
  • 额外注意:你贴出的JSON示例开头多了一个多余的},请确认实际文件中JSON最外层是{包裹,没有语法错误,否则也会导致解码失败。

修正代码

override func viewDidLoad() {
    super.viewDidLoad()
    // 直接读取JSON文件为Data,无需中转String
    guard let jsonURL = Bundle(for: type(of: self)).url(forResource: "airports", withExtension: "json"),
          let jsonData = try? Data(contentsOf: jsonURL) else {
        return
    }
    
    do {
        // 解码为[String: AirportData]字典类型
        let airportDict = try JSONDecoder().decode([String: AirportData].self, from: jsonData)
        // 按需取数据:取所有机场数组可调用Array(airportDict.values)
        guard let firstAirport = airportDict.values.first else {
            return
        }
        print(firstAirport.iata)
    } catch {
        // 打印具体错误信息,方便后续排查其他问题
        print("解码错误:\(error.localizedDescription)")
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:45:03