我有一个关于JSON数据建模的问题。
我正在尝试找出如何解码JSON汇率数据。JSON文件由日期、基础货币(以下示例中的“eur”)和一些与基础货币相比较的货币组成。它将是一个没有基础货币的直接嵌套JSON对象,但由于基础货币被抛在中间,没有键,我不知道从哪里开始。
基础货币和利率是否需要codingKeys?您如何处理丢失的基础货币密钥?
extension MoneyRates: Decodable {
enum CodingKeys: String, CodingKey {
case base = ??
case rates = ??
}
}下面是一些Xcode Playground示例代码:
let json =
"""
{
"date": "2021-03-12",
"eur": {
"aed": 4.420217,
"afn": 93.3213,
"all": 123.104693,
"amd": 628.026474,
}
}
""".data(using: .utf8)
class MoneyRates: Decodable {
let date: String
let base: String
var rates: [String: Double] = [:]
}发布于 2021-06-08 14:57:10
老实说,对于这个特定的JSON,我会使用传统的JSONSerialization
struct MoneyRates {
let date: String
let base: String
let rates: [String: Double]
}
let json =
"""
{
"date": "2021-03-12",
"eur": {
"aed": 4.420217,
"afn": 93.3213,
"all": 123.104693,
"amd": 628.026474,
}
}
"""
do {
let result = try JSONSerialization.jsonObject(with: Data(json.utf8)) as! [String:Any]
var keys = Array(result.keys)
if let dateIndex = keys.firstIndex(of: "date"),
let date = result[keys[dateIndex]] as? String, keys.count == 2 {
keys.remove(at: dateIndex)
let base = keys.first!
let rates = MoneyRates(date: date, base: base, rates: result[base] as! [String:Double])
print(rates)
}
} catch {
print(error)
}https://stackoverflow.com/questions/67880495
复制相似问题