json - 无法从 JSON 获取字典
问题描述
如何从 Json 中获取字典?
解决方案
您可以为此目的创建一个 Swift 结构。这是你如何做到的。
import Foundation
struct MovieStruct: Codable {
let page, totalResults, totalPages: Int?
let results: [Result]?
enum CodingKeys: String, CodingKey {
case page
case totalResults = "total_results"
case totalPages = "total_pages"
case results
}
}
struct Result: Codable {
let voteCount, id: Int?
let video: Bool?
let voteAverage: Double?
let title: String?
let popularity: Double?
let posterPath, originalLanguage, originalTitle: String?
let genreIDS: [Int]?
let backdropPath: String?
let adult: Bool?
let overview, releaseDate: String?
enum CodingKeys: String, CodingKey {
case voteCount = "vote_count"
case id, video
case voteAverage = "vote_average"
case title, popularity
case posterPath = "poster_path"
case originalLanguage = "original_language"
case originalTitle = "original_title"
case genreIDS = "genre_ids"
case backdropPath = "backdrop_path"
case adult, overview
case releaseDate = "release_date"
}
}
创建结构后,您可以执行类似的操作来解析数据。
func getMovieByName(completion: @escaping (Bool, Any?, Error?) -> Void) {
guard let url = URL(string:"https://api.themoviedb.org/3/search/movie?api_key=4cb1eeab94f45affe2536f2c684a5c9e&query='star") else { return }
let session = URLSession.shared
let task = session.dataTask(with: url) { (data, _, _) in
guard let data = data else { return }
do {
let items = try? JSONDecoder().decode(MovieStruct.self, from: jsonData)
DispatchQueue.main.async {
completion(true, items, nil)
}
} catch {
DispatchQueue.main.async {
completion(false, nil, error)
}
}
}
task.resume()
}
请注意,我已经使用您提供的 JSON 创建了结构。我希望它有所帮助。
推荐阅读
- uikit - 在 tvOS 上检测 HDR 模式
- azure-active-directory - 防止登录未经授权的 AAD 租户?
- javascript - Node.js 递归列出文件的完整路径
- ruby - 如何将 Devise Lockable 扩展到 IP
- python-3.x - 为什么这个自定义 QWidget 不能正确显示
- python - 使用 NumPy 的 ReLU 导数
- c# - 如何从 identityServer4 获得 401 响应
- c++ - 犰狳库中线性系统的近似解
- apache-spark - 在过滤损坏的记录字段时,Spark 的 .count() 函数与数据帧的内容不同
- reactjs - React:ComponentDidMount 中的动态 GET URL