我一直在尝试解析此JSON文件的一部分:https://opendata.brussels.be/api/records/1.0/search/?dataset=traffic-volume&rows=3&facet=level_of_service
我想获取记录->字段-> geo_shape->坐标,但是我似乎无法在“坐标”数组中打印这些数组。.我认为这可能是因为坐标内的数组没有名称,所以我不知道如何为它们创建变量。当前获得此代码:
import UIKit
import Foundation
struct Geoshape : Codable {
let coordinates: Array<...>
}
struct Field : Codable {
let geo_shape: Geoshape
let level_of_service: String
}
struct Record: Codable {
let fields: Field
}
struct Traffic: Codable{
let records: Array<Record>
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func clickRefresh(_ sender: Any) {
guard let url = URL(string: "https://opendata.brussels.be/api/records/1.0/search/?dataset=traffic-volume&rows=3&facet=level_of_service") else { return }
let session = URLSession.shared
let task = session.dataTask(with: url){ (data, response, error) in
if let response = response {
print(response)
}
if let data = data {
let traffic = try? JSONDecoder().decode(Traffic.self, from: data)
print(traffic)
}
}
task.resume()
}
}
很显然,数组<...>需要更改,但是我不知道要做什么。我试过只用1个变量(这是Double:Double类型的另一个数组)制作一个额外的结构,但这似乎不起作用。我可以打印一切,直到尝试插入坐标数组为止。
有人可以帮助我吗?
答案 0 :(得分:2)
替换
let coordinates: Array<...>
使用
let coordinates:[[Double]]
答案 1 :(得分:-2)
首先,您在Resource中的文件包含一个JSON,该JSON包含一个数组或Collection
(通常在Swift中)。
如果要将数据提取到模型中,则应使它们符合Decodable
协议,这意味着JSON
属性可以自行解码。
基于 Apple开发者 documentation:
可解码类型是可以从外部表示形式进行解码的类型。
也可编码协议是指可解码和可编码协议。但是目前的目的是解码数据。
typealias Codable = Decodable & Encodable
您的代码应类似于:
为操场做准备,将其粘贴到操场上
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()