【问题标题】:Modeling JSON Currency Object建模 JSON 货币对象
【发布时间】: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] = [:]
}
    

【问题讨论】:

    标签: swiftui ios14


    【解决方案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 一起工作!
    猜你喜欢
    • 2017-04-14
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    相关资源
    最近更新 更多