错误:keyNotFound(CodingKeys(stringValue:“ origin”,intValue:nil),

时间:2020-08-05 12:13:01

标签: ios json swift

**这个问题表明研究工作;它非常有用而且清晰

我正在使用DogsApi构建一个小型的swift dog fetch应用程序,并且在尝试解析JSON时遇到了一些问题。我已经使用以下函数解析get并解析JSON。

下面是我的viewController:**

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var tableView: UITableView!
    

    var dogs = [DogStats]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        downloadJson {
            print("Successful")
        }
    }
    
    func downloadJson(completed: @escaping () -> ()) {
        if let url = URL(string: "https://raw.githubusercontent.com/DevTides/DogsApi/master/dogs.json") {
           URLSession.shared.dataTask(with: url) { data, response, error in
              if let data = data {
                 do {
                    let dogs = try JSONDecoder().decode([DogStats].self, from: data)
                    print(dogs)
                    DispatchQueue.main.async {
                       self.dogs   = dogs
                       self.tableView.reloadData()
                    }
                 } catch let error {
                   print(error)
                 }
              }
           }.resume()
        
    }
    }

}

下面是我的结构

import Foundation

struct DogStats:  Codable {
    let name: String
    let origin: String
    let breed_group: String!
    let life_span: String
    let temperament: String
}

调试器错误

keyNotFound(CodingKeys(stringValue:“ origin”,intValue:nil),Swift.DecodingError.Context(codingPath:[_JSONKey(stringValue:“ Index 5”,intValue:5)],debugDescription:“与键无关的值CodingKeys(stringValue:“ origin”,intValue:nil)(“ origin”)。“,底层错误:nil))

1 个答案:

答案 0 :(得分:1)

起源,品种组,气质未包含在API数据中的所有JSON对象中。因此出现了解析错误。您可以将其设为可选(即让origin:String?)。您还可以将所有字段设为可选。

struct DogStats:  Codable {
    let name: String
    let origin: String?
    let breed_group: String?
    let life_span: String
    let temperament: String?
}
相关问题