首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSON Currency对象建模

JSON Currency对象建模
EN

Stack Overflow用户
提问于 2021-06-08 09:55:25
回答 1查看 51关注 0票数 0

我有一个关于JSON数据建模的问题。

我正在尝试找出如何解码JSON汇率数据。JSON文件由日期、基础货币(以下示例中的“eur”)和一些与基础货币相比较的货币组成。它将是一个没有基础货币的直接嵌套JSON对象,但由于基础货币被抛在中间,没有键,我不知道从哪里开始。

基础货币和利率是否需要codingKeys?您如何处理丢失的基础货币密钥?

代码语言:javascript
运行
复制
extension MoneyRates: Decodable {
    enum CodingKeys: String, CodingKey {
        case base = ??
        case rates = ??
    }
}

下面是一些Xcode Playground示例代码:

代码语言:javascript
运行
复制
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] = [:]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-08 14:57:10

老实说,对于这个特定的JSON,我会使用传统的JSONSerialization

代码语言:javascript
运行
复制
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)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67880495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档