[我正在尝试从此API JSON文件-[https://data.ct.gov/resource/rf3k-f8fg.json]中读取康涅狄格州冠状病毒数据(但我从表示keyNotFound(CodingKeys(stringValue:“ covid19TestsReported”,intValue:nil)的excode中得到此错误,Swift ..DecodingError.Context
但是,仅当我尝试访问文件的covid_19_tests_reported属性时才会出现此错误。
这是我的代码,有人可以告诉我我在做什么错。
import UIKit
class StateViewController: UIViewController {
@IBOutlet weak var testRatioLbl: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
getData()
}
fileprivate func getData(){
let url = URL(string: "https://data.ct.gov/resource/rf3k-f8fg.json")!
URLSession.shared.dataTask(with: url){(data, response, error) in
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let users = try decoder.decode([Users].self, from: data!)
print(users)
}
catch {
print(error)
}
}.resume()
}
func didUpdatePrice(tests: String) {
DispatchQueue.main.async {
self.testRatioLbl.text = tests + " tests"
}
}
func didFailWithError(error: Error) {
print(error)
}
}
class Users: Decodable {
let covid19TestsReported: String
enum CodingKeys: String, CodingKey {
case covid19TestsReported = "covid19TestsReported"
}
required init(from decoder:Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
covid19TestsReported = try values.decode(String.self, forKey: .covid19TestsReported)
}
}
更新您的班级。您的键值为“ covid_19_tests_reported
”,而不是“ covid19TestsReported
”
因为在某些情况下此字段为空,所以使其为可选
struct Users: Decodable {
let covid19TestsReported: String?
private enum CodingKeys: String, CodingKey {
case covid19TestsReported = "covid_19_tests_reported"
}
}
也更新您的getData
fileprivate func getData(){
let url = URL(string: "https://data.ct.gov/resource/rf3k-f8fg.json")!
URLSession.shared.dataTask(with: url){(data, response, error) in
do {
let decoder = JSONDecoder()
let users = try decoder.decode([Users].self, from: data!)
users.forEach { (user) in
if let cases = user.covid19TestsReported {
print(cases)
}
}
}
catch {
print(error)
}
}.resume()
}