如何修复在swift中解析JSON时没有与键CodingKeys关联的值错误



我正在尝试使用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以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)
}

最新更新