无法解码 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 没有键 id
而 id
在结构中不是 optional
.你必须用
来改变它
let id : UUID?
而不是
var id = UUID()
我似乎无法解码我的 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 没有键 id
而 id
在结构中不是 optional
.你必须用
let id : UUID?
而不是
var id = UUID()