gpt4 book ai didi

json - 数据缺失 JSONDecoder

转载 作者:行者123 更新时间:2023-11-28 10:04:18 27 4
gpt4 key购买 nike

我正在尝试使用 AlamofireSwiftyJSON 快速将一组 JSON 字典加载到一个对象中,但是当下载数据时,我得到错误:

keyNotFound(CodingKeys(stringValue: "inProrgresss", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"inProrgresss\", intValue: nil) (\"inProrgresss\").", underlyingError: nil)).

本地化描述只是说数据缺失。我的 JSON 是 here我的代码是这样的:

struct CompData: Codable {
let inProrgresss: [[String: String]]
let past: [[String: String]]
let upcoming: [[String: String]]
}

func getData(url: URLConvertible) {
SVProgressHUD.show()
Alamofire.request(url).responseJSON { (dataResponse) in
if dataResponse.result.value != nil {
SVProgressHUD.dismiss()
let JSONVar = JSON(dataResponse.result.value)
let data = Data(dataResponse.data!)
print(data)
let decoder = JSONDecoder()
do {
let newData = try decoder.decode(CompData.self, from: data)
print("NEWDATA \(newData)")
} catch {
print(error)
}
print(JSONVar)
}
}
}

我对将 JSON 转换为数据类型还很陌生,在这里我找不到任何有用的东西。

最佳答案

阅读 JSON。没有 key inProrgresss

然后为字典创建一个结构,非常简单

struct CompData: Decodable {
let inProgress: [Location]?
let past: [Location]
let upcoming: [Location]
}

struct Location : Decodable {
let city, countryCode, name, date, country, id : String
}

并声明 inProgress 为可选,因为数组为空。

编辑:

getData中有很多冗余代码。这样效率更高。 convertFromSnakeCase 照它说的做。

func getData(url: URLConvertible) {
SVProgressHUD.show()
Alamofire.request(url).responseData { (response) in
SVProgressHUD.dismiss()
switch response.result {
case .success(let data):
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
do {
let result = try decoder.decode(CompData.self, from: data)
print("NEWDATA \(result)")
} catch {
print(error)
}
case .failure(let error): print(error)
}
}
}

关于json - 数据缺失 JSONDecoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56348666/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com