深入嵌套的JSON解码为Swift

问题描述

2个问题

  1. 如何获取特定项目的嵌套“关闭”值?是否要通过在一个结构内的一个结构内的结构来执行此操作,以复制编码结构。

  2. 如何将数字“ 1594647000”与CodingKey一起使用枚举?

{"example2":13}

解决方法

这有意义吗? 根据需要,您可能希望将items保留为字典,或者将其转换为数组。

let jsonString = """
{
    "items": {
        "1594647000": {
            "date": "13-07-2020","open": 388.720000000000027284841053187847137451171875,"high": 394.18999999999999772626324556767940521240234375,"low": 388.3500000000000227373675443232059478759765625,"close": 392.76999999999998181010596454143524169921875
        }
    }
}
"""

struct Item: Decodable {
  let open: Double
  let close: Double
}

struct ItemsList: Decodable {
  let items: [Item]

  private enum CodingKeys: String,CodingKey {
      case items
  }

  init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)

    let dict = try container.decode([String: Item].self,forKey: .items)
    items = dict.map { $0.value }
  }
}

let itemsList = try JSONDecoder().decode(ItemsList.self,from: jsonString.data(using: .utf8)!)