【发布时间】:2022-01-04 16:08:50
【问题描述】:
我需要从格式如下的特定 API 获取数据:
{
"dates": {
"2021-10-01": {....},
"2021-10-02": {....},
"2021-10-03": {....},
"2021-10-04": {....},
"2021-10-05": {....},
......
......
我需要访问这些数据:
{
"dates": {
"2021-10-01": {
"countries": {
"Spain": {
"date": "2021-10-01",
"id": "spain",
"name": "Spain",
"name_es": "España",
"name_it": "Spagna",
"regions": [
{
"date": "2021-10-01",
"id": "andalucia",
"name": "Andalucía",
"name_es": "Andalucía",
"name_it": "Andalucía",
"source": "John Hopkins University",
所以,我已经实现了使用JSONDecoder().decode() 解码数据的下一个结构:
struct AutonomousComunityDataResponse: Decodable {
let dates : datesData
}
struct datesData: Decodable {
let date : spain
}
struct spain: Decodable {
let countries : country2
}
struct country2: Decodable {
let Spain : regionsSpain
}
struct regionsSpain: Decodable {
let regions : [regionSpain]
}
struct regionSpain: Decodable {
let date: String
let today_new_confirmed: Int
}
解码数据时出现错误,因为
keyNotFound(CodingKeys(stringValue: "date", intValue: nil), Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "dates", intValue: nil)],
debugDescription: "No value associated with key CodingKeys(stringValue: \"date\", intValue: nil) (\"date\").", underlyingError: nil))
我不知道如何实现这个来获取数据。我想到了类似循环的东西,只需将 1 添加到变量中,例如:2020-10-01+1。
我被困在这部分了。
【问题讨论】:
-
您的解析失败。但如果不知道您的 JSON 是什么样子,就很难准确判断出什么问题。
-
@Larme 知道可见
-
你应该使用字典而不是
let dates : datesData它应该是let dates : [String: datesData]和let countries : [String: Country]等等。这也意味着你可以删除一些你已经定义的类型。题外话,但请以大写字母开头结构名称以提高可读性。 -
@ÁlvaroR 这有帮助吗? -- stackoverflow.com/questions/50713638/…
标签: json swift api struct jsondecoder