swift - 无法解码 JSON 文件
问题描述
我正在学习 Swift/SwiftUI,但遇到了一个问题。Xcode 是这样写的:
"Expected to decode Dictionary<String, CurrencyData> but found an array instead."
这是一个代码:
import Foundation
import SwiftUI
struct CurrencyData: Codable {
let r030: Int
let txt: String
let rate: Double
let cc: String
let exchangedate: String
}
typealias Currency = [String: CurrencyData]
import SwiftUI
class API: ObservableObject {
@Published var currencyCode: [String] = []
@Published var priceRate: [Double] = []
@Published var exchangeDate: [String] = []
init() {
fetchdata { (currency) in
switch currency {
case .success(let currency):
currency.forEach { (c) in
DispatchQueue.main.async {
self.currencyCode.append(c.value.cc)
self.priceRate.append(c.value.rate)
self.exchangeDate.append(c.value.exchangedate)
}
}
case(.failure(let error)):
print("Unable to featch the currencies data", error)
}
}
}
func fetchdata(completion: @escaping (Result<Currency,Error>) -> ()) {
guard let url = URL(string: "https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json") else { return }
URLSession.shared.dataTask(with: url) { data, responce, error in
if let error = error {
completion(.failure(error))
return
}
guard let safeData = data else { return }
do {
let currency = try JSONDecoder().decode(Currency.self, from: safeData)
completion(.success(currency))
}
catch {
completion(.failure(error))
}
}
.resume()
}
}
解决方案
更改类型以正确解码您收到的内容(显然是一个数组)
这应该可行,但我们无法确定答案,因为我们不知道数据。附加的 json 示例可能会有所帮助。
typealias Currency = [CurrencyData]
推荐阅读
- python - 如何找到具有特定条件的角色?
- python - django.contrib.auth 中的哪个函数创建默认模型权限?
- jquery - 哪个更好/更快 .append("") 或 .append($("",{})
- node.js - 不充足的资金。您尝试从中发送交易的帐户没有足够的资金。需要 892413000000000 并得到:0
- java - 在java中使用构造函数返回一个值
- html - 为什么是
- 包含15px 填充的元素不如元素大的元素?
- c - 程序有效,但输出尾随垃圾值
- prolog - Prolog文字游戏打印描述重复输出
- c# - 如何使用 C# 在 excel 的下拉列表中选择一个项目?
- java - 无法将 BLOB 保存到数据库(ORA-01460:需要未实现或无意义的转换)