Прежде всего, ваш файл в Ресурс содержит JSON, который содержит массив или Collection
(обычно в Swift).
Одна важная вещь: если вам не удалось декодировать объектв JSON вы получаете ноль из всех сохраненных свойств.сбой происходит, когда ваши ключи кодирования не совпадают с ключами в json, или тип, который вы используете, отличается:
В вашем коде вы не смогли преобразовать coordinates
в его тип.координаты - это набор коллекций Double
.
var coordinates: [[Double]]
. Если вы хотите извлечь данные в свои модели, вы должны согласовать их с протоколом Decodable
, что означает, что атрибуты JSON
могут декодировать себя.
На основе Apple Developer Документация :
Декодируемый - это тип, который может декодировать себя из внешнего представления.
также Кодируемый протокол относится к Декодируемым и Кодируемым протоколам.но текущая цель - декодирование данных.
typealias Codable = Decodable & Encodable
Ваш код должен выглядеть следующим образом:
Swift 5
Подготовлено для Playground, вставьте его на игровую площадку
import Foundation
struct GeoShape: Decodable {
var coordinates: [[Double]]
}
struct Field: Decodable {
var geo_shape: GeoShape
}
struct Record: Decodable {
var fields: Field
}
struct Traffic: Decodable {
var records: [Record]
}
guard let url = URL.init(string: "https://opendata.brussels.be/api/records/1.0/search/?dataset=traffic-volume&rows=3&facet=level_of_service")
else {fatalError()}
URLSession.shared.dataTask(with: url){ (data, response, error) in
if let data = data {
let traffic = try? JSONDecoder().decode(Traffic.self, from: data)
print("First coordinate is: ",traffic?.records.first?.fields.geo_shape.coordinates.first)
}
}.resume()