[英]How to fix no value associated with key CodingKeys error when parsing JSON in swift
我正在嘗試使用 swift 解析來自 API 的數據。
JSON
{
"page": 1,
"results": [{
"id": 597,
"overview": "101-year-old...",
"title": "Titanic"
}, {
"id": 598,
"overview": "Another one...",
"title": "Titanic II"
}, {
"id": 599,
"overview": "Another one...",
"title": "Titanic III"
}]
}
模型
import SwiftUI
struct APIResult: Codable {
var data: APIMovieData
}
struct APIMovieData: Codable {
var count: Int
var results: [Movie]
}
struct Movie: Identifiable, Codable {
var id: Int
var title: String
var overview: String
}
查看模型
func searchMovies(){
let originalQuery = searchQuery.replacingOccurrences(of: " ", with: "%20")
let url = "https://api.themoviedb.org/3/search/movie?api_key=XXXXc&query=\(originalQuery)"
let session = URLSession(configuration: .default)
session.dataTask(with: URL(string: url)!) { (data, _, err) in
if let error = err{
print(error.localizedDescription)
return
}
guard let APIData = data else{
print("no data found")
return
}
do{
// decoding API Data....
let movies = try JSONDecoder().decode(APIResult.self, from: APIData)
DispatchQueue.main.async {
if self.fetchedMovies == nil{
self.fetchedMovies = movies.data.results
}
}
}
catch{
print(error)
}
}
.resume()
}
但是當我運行我的應用程序時,搜索失敗:
debugDescription:“沒有與鍵 CodingKeys 關聯的值(stringValue:“data”,intValue:nil)(“data”)。”,underlyingError:nil))
看着這個問題,問題似乎是我的模型與 JSON 結構不匹配。 但是,為 JSON 構建我的模型的正確方法是什么?
正如您所指出的,您的 JSON 結構需要映射您的 Codable 元素。 例如,您的 Codable 以data
開頭,它根本沒有在 JSON 結構中表示。 您的 JSON 中也沒有任何count
。
let jsonData = """
{
"page": 1,
"results": [{
"id": 597,
"overview": "101-year-old...",
"title": "Titanic"
}, {
"id": 598,
"overview": "Another one...",
"title": "Titanic II"
}, {
"id": 599,
"overview": "Another one...",
"title": "Titanic III"
}]
}
""".data(using: .utf8)!
struct APIResult: Codable {
var page: Int
var results: [Movie]
}
struct Movie: Codable {
var id: Int
var overview: String
var title: String
}
do {
let apiResult = try JSONDecoder().decode(APIResult.self, from: jsonData)
let movies = apiResult.results
print(movies)
} catch {
print(error)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.