Swift 4可编码:键是JSON数据中的Int数组

时间:2018-01-06 05:08:49

标签: json swift int swift4 codable

{
  "0": {
    "name": "legaldoc.pdf",
    "cmisid": "yib5C-w92PPtxTBlXl4UJ8oDBthDtAU9mKN5kh2_KrQ"
  },
  "1": {
    "name": "persdoc.pdf",
    "cmisid": "dqAnrdNMXGTz1RbOMI37OY6tH9xMdxiTnz6wEl2m-VE"
  },
  "2": {
    "name": "certdoc.pdf",
    "cmisid": "6d7DuhldQlnb0JSjXlZb9mMOjxV3E_ID-ynJ0QRPMOA"
  }
}

如何使用Swift 4 Codable来解析这样的JSON数据?问题是键是Int数组。 如何为此设置CodingKeys?

1 个答案:

答案 0 :(得分:1)

如评论中所述,没有数组。所有集合类型都是字典。

您可以将其解码为Swift词典。要获取数组,请将结果映射到已排序键的值

let jsonString = """
{
    "0": {
        "name": "legaldoc.pdf",
        "cmisid": "yib5C-w92PPtxTBlXl4UJ8oDBthDtAU9mKN5kh2_KrQ"
    },
    "1": {
        "name": "persdoc.pdf",
        "cmisid": "dqAnrdNMXGTz1RbOMI37OY6tH9xMdxiTnz6wEl2m-VE"
    },
    "2": {
        "name": "certdoc.pdf",
        "cmisid": "6d7DuhldQlnb0JSjXlZb9mMOjxV3E_ID-ynJ0QRPMOA"
    }
}
"""
struct Item : Codable {
    let name, cmisid : String
}
do {
    let data = Data(jsonString.utf8)
    let result = try JSONDecoder().decode([String: Item].self, from: data)
    let keys = result.keys.sorted()
    let array = keys.map{ result[$0]! }
    print(array)

} catch {
    print(error)
}