Не удалось декодировать 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")

Я получаю фатальную ошибку («Не удалось декодировать (файл) из пакета».) Итак, мой вопрос: что здесь не так? Ошибка в моей структуре аэропорта? Я знаю, что расширение пакета работает, я использовал его со многими другими JSONS.

измените try? на try, используйте do catch и print(error) в catch. вы получите гораздо лучшее описание там.

lorem ipsum 18.03.2022 12:00

По какой-то причине я обнаружил, что «var id = UUID()» был причиной проблемы… не совсем уверен, почему

BlondePK 18.03.2022 12:16
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
2
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Именно из-за свойства id в вашей структуре у вашего json нет ключа id, а id в структуре нет optional. Вы должны изменить его с помощью

let id : UUID?

вместо

var id = UUID()

Другие вопросы по теме