如何在Swift 4.2中解析以下动态JSON?

时间:2018-10-05 07:31:02

标签: swift jsondecoder

{
  "payload": {
    “key1”: “value1”,
    “key2”: "{\"command\": \"playSound\",\"tone\": 0,\"delay\": 100000}”,
    “key3”: 0
  },
}

以上是我的响应数据,而“有效载荷”是已知键,但是在“有效载荷”中,所有键和值都是未知的。

例如'key1'可以是任何名称,'key1'的值可以是任何值(Int / String / Dictionary)。

我的代码如下所示,但是不起作用。

let decoder = JSONDecoder()
do {
    let dict = try! decoder.decode([String: Any].self, from: data!)
    complete(true, dict, nil)
}

有什么主意吗?

1 个答案:

答案 0 :(得分:1)

一种选择是退回到旧的JSONSerialization,但缺点是您失去了对顶层已知密钥的Decodable支持。

另一种选择是对外部对象(具有init(from: Decoder)的对象)实施payload方法,并在那里手动解码字典。

或者您可以使用Codable而不是Any的包装器。这是one(免责声明:我是作者)。