簡體   English   中英

快速解析 JSON 時如何修復與鍵 CodingKeys 錯誤相關的沒有值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM