gpt4 book ai didi

json - 如何修复 CodingKeys 的 "no value associated"错误?

转载 作者:行者123 更新时间:2023-11-30 10:41:22 27 4
gpt4 key购买 nike

我尝试从下面的 API 解码 API,但仍然收到以下错误:

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

API地址:https://age-of-empires-2-api.herokuapp.com/docs/

我已经尝试多次检查我的结构,并在不同级别的 API 中尝试调用代码,但仍然无法获取数据。我还尝试使用 print(resources.XXX) 格式从不同级别调用对象。

这是我第一次从 API 进行数据调用:

{
"resources": {
"civilizations": "https://age-of-empires-2-api.herokuapp.com/api/v1/civilizations",
"units": "https://age-of-empires-2-api.herokuapp.com/api/v1/units",
"structures": "https://age-of-empires-2-api.herokuapp.com/api/v1/structures",
"technologies": "https://age-of-empires-2-api.herokuapp.com/api/v1/technologies"
}
}

这些是结构的前两层:

// MARK: - Resources
struct Resources: Codable {
let resources: [String : ResourcesList]

enum CodingKeys: String, CodingKey {
case resources
}
}

// MARK: - ResourcesList
struct ResourcesList: Codable {
let civilizations: CivilizationList
let units: UnitList
let structures: StructureList
let technologies: TechnologyList

enum CodingKeys: String, CodingKey {
case civilizations, units, technologies, structures
}
}

在这些结构体下面,我实现了 API 网站中所示的模型,例如 CivilizationList、Civilization 等。

这是我的调用代码:

        let jsonUrl = "https://age-of-empires-2-api.herokuapp.com/api/v1"
guard let url = URL(string: jsonUrl) else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in

guard let data = data else { return }
let dataAsString = String(data: data, encoding: .utf8)

do {
let decoder = JSONDecoder()
let resources = try decoder.decode([String : Resources].self, from: data)
print(resources)
} catch {
print(error)
}
print(dataAsString!)
}.resume()

我已经查看了这里关于相同错误代码的所有其他线程,尝试了一些东西,但可能有一些非常基本的东西我遗漏了,不幸的是我是一个初学者,没有注意到它。如有任何帮助,我们将不胜感激。

最佳答案

模型应该是

// MARK: - Empty
struct Resources: Codable {
let resources: ResourcesList
}

// MARK: - Resources
struct ResourcesList: Codable {
let civilizations, units, structures, technologies: String
}

解码

let resources = try decoder.decode(Resources.self, from: data)

作为文明、单位、结构、技术是字符串而不是模型

let resources = try decoder.decode([String : ResourcesList].self, from: data)

关于json - 如何修复 CodingKeys 的 "no value associated"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56725069/

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