使用SwiftyJson iOS解码嵌套Json和缺少的对象

使用SwiftyJson iOS解码嵌套Json和缺少的对象,ios,swifty-json,codable,Ios,Swifty Json,Codable,我调用此api以接收单火箭发射事件: 使用简单的Get请求。 尝试使用SwiftyJson进行解码也尝试了Codable,但没有成功读取rocket->imageURL 这是我的密码: struct LaunchHistory { var launches = [LaunchItem]() init(with json:JSON) { for launch in json["launches"].arrayValue { let launchItem = LaunchI

我调用此api以接收单火箭发射事件: 使用简单的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属性/键几乎都是双倍的。 火箭物体不见了。 我错过了什么

谢谢

使用可解码的


你可以点击这个链接[看起来和我没有添加的可编码部分差不多,但它是有效的:谢谢你的帮助。我会试着看看它们的区别
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()