Swift - 使用 jsonDecoder 解码特定密钥
Swift - Decode specific key using jsonDecoder
我不确定如何表达我的问题,但我正在尝试寻找如何解码而不是整个 json,而是只解码特定密钥而不创建多个模型。
JSON 示例:
{
"page": 1,
"results": [
{
"poster_path": "/e1mjopzAS2KNsvpbpahQ1a6SkSn.jpg",
"adult": false,
"overview": "From DC Comics comes the Suicide Squad, an antihero team of incarcerated supervillains who act as deniable assets for the United States government, undertaking high-risk black ops missions in exchange for commuted prison sentences.",
"release_date": "2016-08-03",
"genre_ids": [
14,
28,
80
],
"id": 297761,
"original_title": "Suicide Squad",
"original_language": "en",
"title": "Suicide Squad",
"backdrop_path": "/ndlQ2Cuc3cjTL7lTynw6I4boP4S.jpg",
"popularity": 48.261451,
"vote_count": 1466,
"video": false,
"vote_average": 5.91
},
...
]
}
我只需要得到results
。
现在我有 2 个模型:
struct Movies: Codable {
let results: [MovieResult]?
}
struct MovieResult: Codable {
let popularity: Double?
let poster_path: String?
let backdrop_path: String?
let title: String?
let vote_average: Double?
let overview: String?
let release_date: String?
}
并开始解码:
RESTful.request(path: path, method: "GET", parameters: parameters, headers: nil) { (result) in
switch result {
case .failure(let error):
completion(.failure(.networkingError))
case .success(let data):
let jsonDecoder = JSONDecoder()
do{
let popularMovies = try jsonDecoder.decode(Movies.self, from: data)
completion(.success(popularMovies))
} catch (let error) {
completion(.failure(.errorDecoding))
}
}
}
有没有办法(使用json解码器)将其解码为单个模型,因为我只需要results
?
JSON 必须始终从根对象解码。
但是有一个非常简单的解决方案,声明Result
类型
Result<MovieResult,Error>
并在成功时调用 completion
completion(.success(popularMovies.results))
我不确定如何表达我的问题,但我正在尝试寻找如何解码而不是整个 json,而是只解码特定密钥而不创建多个模型。
JSON 示例:
{
"page": 1,
"results": [
{
"poster_path": "/e1mjopzAS2KNsvpbpahQ1a6SkSn.jpg",
"adult": false,
"overview": "From DC Comics comes the Suicide Squad, an antihero team of incarcerated supervillains who act as deniable assets for the United States government, undertaking high-risk black ops missions in exchange for commuted prison sentences.",
"release_date": "2016-08-03",
"genre_ids": [
14,
28,
80
],
"id": 297761,
"original_title": "Suicide Squad",
"original_language": "en",
"title": "Suicide Squad",
"backdrop_path": "/ndlQ2Cuc3cjTL7lTynw6I4boP4S.jpg",
"popularity": 48.261451,
"vote_count": 1466,
"video": false,
"vote_average": 5.91
},
...
]
}
我只需要得到results
。
现在我有 2 个模型:
struct Movies: Codable {
let results: [MovieResult]?
}
struct MovieResult: Codable {
let popularity: Double?
let poster_path: String?
let backdrop_path: String?
let title: String?
let vote_average: Double?
let overview: String?
let release_date: String?
}
并开始解码:
RESTful.request(path: path, method: "GET", parameters: parameters, headers: nil) { (result) in
switch result {
case .failure(let error):
completion(.failure(.networkingError))
case .success(let data):
let jsonDecoder = JSONDecoder()
do{
let popularMovies = try jsonDecoder.decode(Movies.self, from: data)
completion(.success(popularMovies))
} catch (let error) {
completion(.failure(.errorDecoding))
}
}
}
有没有办法(使用json解码器)将其解码为单个模型,因为我只需要results
?
JSON 必须始终从根对象解码。
但是有一个非常简单的解决方案,声明Result
类型
Result<MovieResult,Error>
并在成功时调用 completion
completion(.success(popularMovies.results))