Swift 4解析对象数组

我将解析代码转移到Swift4 / Xcode9时遇到问题。 我正在通过我的模型正确解析它,我知道问题是因为我正在解析根JSON对象,但是我的REST API是结构化的JSON根 – >数据数组 – >其他对象。 我知道这可能很简单,但我已经苦苦挣扎多年了。 我附上了REST API布局的图像,只需要知道如何进入对象来检索值。 在此处输入图像描述

let jsonUrlString = "HIDDEN" guard let url = URL(string: jsonUrlString) else {return} URLSession.shared.dataTask(with: url) { (data, response, err) in guard let data = data else {return} do { let show = try JSONDecoder().decode(TvHeaderModel.self, from: data) print(show.title) } catch let jsonErr { print("Error serializing JSON", jsonErr) } }.resume() struct TvHeaderModel: Decodable { var id: Int? var title: String? var year: Int? var songCount: Int? var poster: String? init(json: [String: Any]) { id = json["_id"] as? Int ?? -1 title = json["title"] as? String ?? "" year = json["year"] as? Int ?? -1 songCount = json["song_count"] as? Int ?? -1 poster = json["poster_urL"] as? String ?? "" } } 

基本上你不需要init(json初始化器,当使用JSONDecoder并将所有属性声明为可选,并且始终分配非可选值时无论如何都是无意义的。


要解码季节添加结构

 struct Season : Decodable { private enum CodingKeys : String, CodingKey { case id = "_id", season case show = "tv_show", createdDate = "created_at" case numberOfEpisodes = "episodes_count", numberOfSongs = "songs_count" } let id, season, show, numberOfEpisodes, numberOfSongs : Int let createdDate : Date } 

TvHeaderModel添加一个属性

 let seasons : [Season] 

并设置解码器的dateDecodingStrategy来解码dateDecodingStrategy

 let decoder = JSONDecoder() decoder.dateDecodingStrategy = .iso8601 decoder.decode(TvHeaderModel.self, from: data)