我正在嘗試使用 Alamofire 從 API url 獲取回應值。我創建了一個資料模型,回應很好,但我的poster_path和為空release_date。我想知道如何正確處理 JSON 回應。這是我的代碼:
let decoder: JSONDecoder = {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
return decoder
}()
func fetchMovies( completion: @escaping(MovieResponse?, AFError?) -> Void) {
let url = URL(string: "url")!
let params = [:]
AF.request(url, method: .get , parameters: params)
.responseDecodable(of: Data.self, decoder: decoder) { response in
switch response.result {
case .success(let movies):
completion(movies, nil)
case .failure(let error):
completion(nil , error)
}
}
}
回復:

JSON 示例:
"results": [
{
"adult": false,
"backdrop_path": "/5hNcsnMkwU2LknLoru73c76el3z.jpg",
"genre_ids": [
35,
18,
10749
],
"id": 19404,
"original_language": "hi",
"original_title": "??????? ????????? ?? ???????",
"overview": "Raj is a rich, carefree, happy-go-lucky second generation NRI. Simran is the daughter of Chaudhary Baldev Singh, who in spite of being an NRI is very strict about adherence to Indian values. Simran has left for India to be married to her childhood fiancé. Raj leaves for India with a mission at his hands, to claim his lady love under the noses of her whole family. Thus begins a saga.",
"popularity": 27.119,
"poster_path": "/2CAL2433ZeIihfX1Hb2139CX0pW.jpg",
"release_date": "1995-10-20",
"title": "Dilwale Dulhania Le Jayenge",
"video": false,
"vote_average": 8.7,
"vote_count": 3275
},
uj5u.com熱心網友回復:
取下整個CodingKeys列舉Movie。
該convertFromSnakeCase策略已經完成了鍵映射。
并且不要不小心將所有屬性宣告為可選。嚴肅的服務,比如themoviedb發送非常一致的資料。至少很可能一部電影總是有一個標題和一個識別符號。
uj5u.com熱心網友回復:
該keyDecodingStrategy的JSONDecoder默認值是.useDefaultKeys
該dateDecodingStrategy的JSONDecoder默認值是.deferredToDate
附:
該.deferredToDate格式是 Apple 自己的日期格式,它跟蹤自 2001 年 1 月 1 日以來的秒數和毫秒數。這不是很有用。
正如你所寫的CodingKey,posterPath是poster_path
所以keyDecodingStrategyof JSONDecoder,你不應該指定.convertFromSnakeCase.
將其保留為默認值。
對于 JSON 中的日期值,您應該撰寫自己的格式化程式
所以 JSONDecoder 應該是:
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(formatter)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/384099.html
下一篇:Jquery用換行符附加文本資料
