Как анализировать ниже динамический JSON в Swift 4.2?

{
  "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)
}

Есть идеи?


person Sunil Targe    schedule 05.10.2018    source источник


Ответы (1)


Один из вариантов — вернуться к старому JSONSerialization, но недостатком является потеря поддержки Decodable для известных ключей на верхнем уровне.

Другой вариант — реализовать метод init(from: Decoder) вашего внешнего объекта (того, у которого есть payload) и вручную декодировать там словарь.

Или есть Codable-совместимые оболочки, которые можно использовать вместо Any. Вот один (отказ от ответственности: Я автор).

person Arkku    schedule 05.10.2018