json - 在 Swift 中从包含数字和连字符的 JSON 数据创建解码路径?
问题描述
这对我来说相对较新,我搜索过高低,但未能找到类似的场景。
我已经从 API URL 中检索了一些 JSON 数据,并通过将数据解析到单独的工作表并使用带有“Decodable”值集的结构和常量,成功地解码了这些数据中的各种值并将其输出为字符串。我遇到的问题是 Json 数据中的一个容器是这种格式的连字符日期 dates['2020-11-04'] 所以swift不会让我创建一个具有这个名称的结构(这也看起来像一个数组但在 Web 浏览器中查看未格式化的 JSON 数据时没有方括号)。
这是我想要作为字符串输出的日期的完整路径以及正在使用的 URL(使用 JSON Viewer Pro 从 Web 浏览器复制):
日期['2020-11-04'].countries.Afghanistan.date
https://api.covid19tracking.narrativa.com/api/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 Parse 的管理表:
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 路径解码数据时工作得非常好,它只是这个容器,带有额外的符号和数字,我很难过。
如果某些术语不准确,希望我已经提供了足够的信息并道歉,这对我来说还是很新的。
谢谢!
解决方案
推荐阅读
- arrays - Go 中的切片类型无法进行比较的根本原因是什么?
- json - 如何在不使用 json() 的情况下访问 ID,同时使用 HttpClient
- python - NumPy 中的 np.dot 打印预期内容的转置
- java - 在 Java 中,用允许的文件名字符获取完整的语言环境日期和小时字符串的好方法是什么?
- javascript - 如何确保函数“window.location.reload()”只触发一次而不是无限循环?
- java - eclipse 生成下一个 errro 类型 com.google.common.collect.ImmutableList$Builde
- java - Android 应用在模拟器上运行,在手机上安装,在设备上崩溃
- java - 多次调用 Swing 动作侦听器 - 超敏感
- javascript - 如何沿索引添加多个数组中的对象
- ruby-on-rails - 使用部分时缺少参数