无法解码 JSON,SwiftUI

Faild to decode JSON, SwiftUI

我似乎无法解码我的 JSON。它定位并加载,但无法解码。

这是 JSON 示例:

[{
"name": "Hartsfield Jackson Atlanta Intl",
"city": "Atlanta",
"country": "United States",
"iata_code": "ATL",
"_geoloc": {
  "lat": 33.636719,
  "lng": -84.428067
},
"links_count": 1826,
"objectID": "3682"}]

这是我的结构:

struct Airports: Codable, Identifiable {
struct GeoLoc: Codable {
    let lat: Double
    let lng: Double
}
var id = UUID()
let name: String
let city: String
let country: String
let iata_code: String
let _geoloc: GeoLoc
let links_count: Int
let objectID: String }

捆绑扩展:

extension Bundle {
func decode<T: Codable>(_ file: String) -> T {
    guard let url = self.url(forResource: file, withExtension: nil) else {
        fatalError("Failed to locate \(file) in bundle.")
    }
    
    guard let data = try? Data(contentsOf: url) else {
        fatalError("Failed to load \(file) from bundle.")
    }
    
    let decoder = JSONDecoder()
    let formatter = DateFormatter()
    formatter.dateFormat = "y-MM-dd"
    decoder.dateDecodingStrategy = .formatted(formatter)
    
    guard let loaded = try? decoder.decode(T.self, from: data) else {
        fatalError("Failed to decode \(file) from bundle.")
    }
    
    return loaded
}}

我在内容视图中这样称呼它:

let airports: [Airports] = Bundle.main.decode("airports.json")

我收到 fatalError(“无法从包中解码(文件)。”) 所以我的问题是,这里出了什么问题?我的机场结构有错误吗? 我知道捆绑扩展正在运行,我已经将它与许多其他 JSONS.

一起使用

这是因为 属性 of id 在你的结构中你的 json 没有键 idid 在结构中不是 optional.你必须用

来改变它
let id : UUID?

而不是

var id = UUID()