JSONSerialization.jsonObject для сложного массива - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь передать данные из API в объект. Однако я получаю ошибки, потому что массив сложный и не того же типа - он также будет отличаться от API в зависимости от сделанного запроса.

let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, Dictionary<String, String>>

Массив / данные, которые ему дают, как таковые :

[
   'heartbeatStatus' => 'ok',
    'events' => [
       ['id' => '1', 'name' => 'Event'],
       ['id' => '2', 'name' => 'Event 2'],
    ]         
]

Есть ли простой способ сделать это? Вопросы, которые я видел в SO до сих пор, относятся либо к более старым версиям Swift (это Swift 5), либо не являются просто разными.

Ошибки, которые я получаю, такие же (разные при разных попытках made)

Невозможно привести значение типа '__NSSingleObjectArrayI' (0x1ed250b30) к 'NSDictionary' (0x1ed251378). 2020-04-13 18: 52: 23.173759 + 0100 удаленный идентификатор приложения [1209: 472869] Не удалось преобразовать значение типа '__NSSingleObjectArrayI' (0x1ed250b30) в 'NSDictionary' (0x1ed251378).

1 Ответ

1 голос
/ 13 апреля 2020

Попробуйте использовать Кодируемый . Сначала определите структуру, которая будет вашей моделью:

struct HeartbeatResponse: Codable { // or whatever

    let heartbeatStatus: String
    let events: [Event]

    struct Event: Codable {

        let id: String
        let name: String

    }

}

Затем расшифруйте:

do {
    if let data = data {
        let heartbeat = JSONDecoder().decode(HeartbeatResponse.self, data)
        // do stuff with heartbeat
    }
} catch {
    print(error)
}
...