使用 SwiftyJson 解码嵌套 Json、缺少对象 iOS
Decoding Nested Json, Missing objects using SwiftyJson iOS
我调用此 api 来接收单个火箭发射事件:
https://launchlibrary.net/1.4/launch/next/1 使用简单的 Get
请求。
尝试使用 SwiftyJson
(也尝试过 Codable
)进行解码,但未能成功读取 "rocket" -> "imageURL"
这是我的代码:
struct LaunchHistory {
var launches = [LaunchItem]()
init(with json:JSON) {
for launch in json["launches"].arrayValue {
let launchItem = LaunchItem(with: launch)
launches.append(launchItem)
}
}
}
struct LaunchItem {
let id:Int?
let name: String?
let tbddate: Int?
let status: LaunchStatus?
let rocketImage: String?
init(with json:JSON) {
self.id = json["id"].int
self.name = json["name"].string
self.tbddate = json["tbddate"].int
self.status = LaunchStatus(rawValue: json["status"].int ?? 0)
self.rocketImage = json["rocket"]["imageURL"].string
}
}
当 LaunchItem
解码时,所有 i 11 properties/key 而不是几乎翻倍。
rocket
对象丢失。
我在这里错过了什么?
谢谢!
使用 (De)Codable
非常简单
struct Root : Decodable {
let launches : [LaunchItem]
}
struct LaunchItem : Decodable {
let id: Int
let name: String
let tbddate: Int
let rocket: Rocket
}
struct Rocket : Decodable {
let imageURL : URL
}
let url = URL(string: "https://launchlibrary.net/1.4/launch/next/1")!
let task = URLSession.shared.dataTask(with: url) { (data, _, error) in
if let error = error { print(error); return }
do {
let result = try JSONDecoder().decode(Root.self, from: data!)
print(result.launches.first?.rocket.imageURL ?? "n/a")
} catch {
print(error)
}
}
task.resume()
我调用此 api 来接收单个火箭发射事件:
https://launchlibrary.net/1.4/launch/next/1 使用简单的 Get
请求。
尝试使用 SwiftyJson
(也尝试过 Codable
)进行解码,但未能成功读取 "rocket" -> "imageURL"
这是我的代码:
struct LaunchHistory {
var launches = [LaunchItem]()
init(with json:JSON) {
for launch in json["launches"].arrayValue {
let launchItem = LaunchItem(with: launch)
launches.append(launchItem)
}
}
}
struct LaunchItem {
let id:Int?
let name: String?
let tbddate: Int?
let status: LaunchStatus?
let rocketImage: String?
init(with json:JSON) {
self.id = json["id"].int
self.name = json["name"].string
self.tbddate = json["tbddate"].int
self.status = LaunchStatus(rawValue: json["status"].int ?? 0)
self.rocketImage = json["rocket"]["imageURL"].string
}
}
当 LaunchItem
解码时,所有 i 11 properties/key 而不是几乎翻倍。
rocket
对象丢失。
我在这里错过了什么?
谢谢!
使用 (De)Codable
struct Root : Decodable {
let launches : [LaunchItem]
}
struct LaunchItem : Decodable {
let id: Int
let name: String
let tbddate: Int
let rocket: Rocket
}
struct Rocket : Decodable {
let imageURL : URL
}
let url = URL(string: "https://launchlibrary.net/1.4/launch/next/1")!
let task = URLSession.shared.dataTask(with: url) { (data, _, error) in
if let error = error { print(error); return }
do {
let result = try JSONDecoder().decode(Root.self, from: data!)
print(result.launches.first?.rocket.imageURL ?? "n/a")
} catch {
print(error)
}
}
task.resume()