数组内的JSON数组

时间:2018-10-12 17:26:56

标签: ios json swift

我正在寻找访问位于另一个数组内的JSON数组内的字符串。我正在使用JSONDecoder访问JSON API。使用JSON数组尝试使用过去使用的各种方法时,我收到错误消息。

这是代码:

var country = [Results]()

struct Rating: Codable {
    let results: [Results]
}

struct Results: Codable {
    let iso_3166_1: String
    let release_dates: [Release_Dates]
}

struct Release_Dates: Codable {
    let certification: String
}


func loadRating() {

    let id = filmId
    let apiKey = ""
    let url = URL(string: "https://api.themoviedb.org/3/movie/\(id)/release_dates?api_key=\(apiKey)")
    let request = URLRequest(
        url: url! as URL,
        cachePolicy: URLRequest.CachePolicy.reloadIgnoringLocalCacheData,
        timeoutInterval: 10 )

    let session = URLSession (
        configuration: URLSessionConfiguration.default,
        delegate: nil,
        delegateQueue: OperationQueue.main
    )

    let task = session.dataTask(with: request, completionHandler: { (dataOrNil, response, error) in
        if let data = dataOrNil {
            do { let rates = try! JSONDecoder().decode(Rating.self, from: data)
               self.country = rates.results
                let us = self.country.filter({ $0.iso_3166_1.contains("US") })
                print(us)


        }
        }

    })

    task.resume()
}

us打印到控制台

[Film.DetailsView.Results(iso_3166_1: "US", release_dates: [Film.DetailsView.Release_Dates(certification: "PG-13")])]

我正在尝试访问certification字符串。

实现此目标的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

usResults的数组。

要获得第一个认证,请​​使用此:

print(us.first!.release_dates.first!. certification)

为简便起见,我被迫解开包装,您应该使用可选的装订或保护声明正确地进行包装。

答案 1 :(得分:1)

非常简单,certification的结果是一个数组,release_dates的结果在数组let us = self.country.filter({ $0.iso_3166_1.contains("US") }) for item in us { for releaseDate in item.release_dates { print(releaseDate.certification) } }

CodingKeys

请通过使用convertFromSnakeCaseUS策略映射键来命名结构成员名称​​ lowerCamelCased

如果只有一项first,请使用if let us = self.country.first({ $0.iso_3166_1.contains("US") }) { for releaseDate in us.release_dates { print(releaseDate.certification) } }

logging.Filter