Расшифровка вложенных Json, отсутствующих объектов с помощью SwiftyJson iOS - PullRequest
0 голосов
/ 16 октября 2019

Я вызываю этот 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 свойств / ключ вместо почти двойного. rocket объект отсутствует. что мне здесь не хватает?

спасибо!

1 Ответ

1 голос
/ 16 октября 2019

Это довольно легко с (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()
...