从Swift中包含数字和连字符的JSON数据创建解码路径?

从Swift中包含数字和连字符的JSON数据创建解码路径?,json,swift,struct,decode,let,Json,Swift,Struct,Decode,Let,这对我来说是相对较新的,我已经到处搜索,但没有找到类似的场景 我从一个API URL中检索了一些JSON数据,并通过将数据解析到一个单独的表中,并使用带有“可解码”值集的结构和常量,成功地将这些数据中的各种值解码并输出为字符串。我遇到的问题是,Json数据中的一个容器是一个连字符的日期,格式为dates['2020-11-04'],因此swift不允许我使用此名称创建结构(这看起来也像一个数组,但在web浏览器中查看未格式化的Json数据时没有方括号) 以下是我希望输出为字符串的日期的完整路径和

这对我来说是相对较新的,我已经到处搜索,但没有找到类似的场景

我从一个API URL中检索了一些JSON数据,并通过将数据解析到一个单独的表中,并使用带有“可解码”值集的结构和常量,成功地将这些数据中的各种值解码并输出为字符串。我遇到的问题是,Json数据中的一个容器是一个连字符的日期,格式为dates['2020-11-04'],因此swift不允许我使用此名称创建结构(这看起来也像一个数组,但在web浏览器中查看未格式化的Json数据时没有方括号)

以下是我希望输出为字符串的日期的完整路径和所使用的URL(使用JSON Viewer Pro从web浏览器复制):

日期['2020-11-04']。国家。阿富汗。日期

以下是包含用于解码数据的结构和常量的工作表:

import Foundation

//I understand the below name will not work but i've included it to show my presumed process
struct CovidData: Decodable {
    let dates: dates[2020-11-04]
}

//Once again the below struct name does not work but i've included it as an example of my presumed process.
struct dates[2020-11-04]: Decodable {
    let countries: countries
}

struct countries: Decodable {
    let Afghanistan: Afghanistan
}
struct Afghanistan: Decodable {
    let date: String
}
这是我的管理表,包括API调用和JSON解析:

import Foundation

protocol CovidDataManagerDelegate {
    func didUpdateCovidData(_ covidDataManager: CovidDataManager, covid: CovidModel)
}

struct CovidDataManager {
    
    var delegate: CovidDataManagerDelegate?
    
    let covidURL = "https://api.covid19tracking.narrativa.com/api/2020-11-04"
    
    func getData() {
        let urlString  = covidURL
        performRequest(with:urlString)
        
    }
    
    func performRequest(with urlString: String){
        
        if let url = URL(string: urlString){
            
            let session = URLSession(configuration: .default)
            
            let task = session.dataTask(with: url) { (data, response, error) in
                if error != nil {
                    print("Error")
                    return
                }
                if let safeData = data {
                    if let covid = parseJSON(safeData){
                    self.delegate?.didUpdateCovidData(self, covid: covid)
                    }
                }
            }
            task.resume()
        }
        
        func parseJSON(_ covidData: Data) -> CovidModel?  {
            let decoder = JSONDecoder()
            do {
                let decodedData = try decoder.decode(CovidData.self, from: covidData)
                let date = decodedData.dates['2020-11-04'].countries.Afghanistan.date
                let covid = CovidModel(date: date)
                print(date)
                return covid
            } catch {
                print("Error with JSON Parse")
                return nil
            }
        }
    }

}
我没有像前面提到的那样包括我的UI更新表。当使用完全由字符串组成的JSON路径解码数据时,调用和解码工作非常好。这是唯一一个包含额外符号和数字的容器

希望我已经提供了足够的信息,如果其中一些术语不准确,我表示歉意,这对我来说还是很新鲜的


谢谢

我不知道您的“JSON查看器专业版”,但很明显,JSON
'2020-11-04'
中没有任何内容。现在还不清楚为什么你真的想要那个
字符。你不该这么做。此外,您可能想跳过它。与那里的解决方案(用户建议)相同。不幸的是,web浏览器中的结构是“日期>2020-11-04>国家>阿富汗”,我找到的所有解决方案都有示例代码,其中结构(或常量)的名称是文本字符串,而我需要访问的数据路径有数字和连字符。如果我可以跳过这个容器,那将很有帮助,但我不知道如何从链接中做到这一点。不,没有“连字符日期”,这可能只是在JSON View Pro中,而不是在现实中。因此,我的解码结构应该遵循以下路径。。。。struct CovidData:Decodable{let dates:dates}struct dates:Decodable{let countries:countries}struct countries:Decodable{let Afghanistan:Afghanistan}struct Afghanistan:Decodable{let date:String}这是在web浏览器中不使用JSON查看器的数据,路径中似乎有日期,在swift中忽略这一点似乎对我仍然不起作用。{“日期”:{“2020-11-04”:{“国家”:{“阿富汗”:{“日期”:“2020-11-04”,“id”:“阿富汗”,“链接”:[{“href”:“/api/2020-11-