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

