建模 JSON 货币对象
Posted
技术标签:
【中文标题】建模 JSON 货币对象【英文标题】:Modeling JSON Currency Object 【发布时间】:2021-06-08 01:55:25 【问题描述】:我有一个关于 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] = [:]
【问题讨论】:
【参考方案1】:老实说,对于这个特殊的 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)
【讨论】:
感谢 vadian 的帮助。现在让它与我的 API 一起工作!以上是关于建模 JSON 货币对象的主要内容,如果未能解决你的问题,请参考以下文章