【发布时间】:2018-09-24 23:19:03
【问题描述】:
这是我试图从 Strava API 解析的 JSON:
{
"firstname": "Evan",
"lastname": "Arthur",
"city": "",
"state": "",
"country": "",
"sex": "M",
"measurement_preference": "feet",
"ftp": 285,
"bikes": [
{
"id": "b4770368",
"primary": true,
"name": "Felt Disc",
"resource_state": 2,
"distance": 2528687
}
]
}
我正在尝试访问一些条目并从中创建一个对象。这是我的运动员课:
import Foundation
struct athlete: Codable{
let firstName: String
let lastName: String
let sex: String
let measurement: String
enum CodingKeys: String, CodingKey {
case firstName = "firstname"
case lastName = "lastname"
case sex = "sex"
case measurement = "measurement_preference"
case bikes = "bikes"
}
struct Bike: Codable {
let name: String
let distance: String
// enum CodingKeys: String, CodingKey{
// case name = "name"
// case distance = "distance"
// }
}
let bikes: [Bike]
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.firstName = try container.decode(String.self, forKey: .firstName)
self.lastName = try container.decode(String.self, forKey: .lastName)
self.sex = try container.decode(String.self, forKey: .sex)
self.measurement = try container.decode(String.self, forKey: .measurement)
self.bikes = try container.decode([Bike].self, forKey: .bikes)
}
}
我尝试用这段代码解析它:
let decoder = JSONDecoder()
let definition = try? decoder.decode(athlete.self, from: jsonData)
我知道我正在正确检索 api,并且我可以访问解析“自行车”之前的所有字段,但我无法访问自行车。使用此代码,decoder.decode() 会失败。如何正确访问数组并对其进行解码?
【问题讨论】:
-
为什么要添加自己的
init方法?你没有做任何特别的事情。尝试删除您的自定义init,它可能会起作用。如果没有,请在您的问题中发布错误。