Как разобрать ответ json swift3?

Мой ответ выглядит так:

[
    {
        "Part" : {
            "id" : "418502",
            "uuid" : "21ec7cdb-cd2d-4b12-8a90-775762eb0f26"
        },
        "Category" : {
            "category_name" : "Regulators",
            "category_code" : "RG"
        }
    },
    {
        "Part" : {
             "id" : "418502",
             "uuid" : "21ec7cdb-cd2d-4b12-8a90-775762eb0f26"
        },
        "Category" : {
             "category_name" : "Regulators",
             "category_code" : "RG"
        }
    }
]

Поэтому мне нужно разобрать ответ выше, чтобы получить Part массив и Category массив. После поиска в гугле я нашел:

let resultJson = try JSONSerialization.jsonObject(with: data, options: []) as? [String : AnyObject]
print(resultJson!)

Но он выдает фатальную ошибку: неожиданно найденный ноль при развертывании необязательного значения.

Я новичок в Свифте, я не знаю, как его преобразовать. Я завершил это в Android, так что я могу с уверенностью сказать, что я получил выше ответ от сервера. Я пишу общую функцию для вызова веб-службы, она работает для других служб, поэтому я думаю, что в этом нет проблем.

Как я могу разобрать свой ответ, чтобы я мог получить Part массив и Category массив? Спасибо.

1 ответ

Решение

Ваша структура JSON имеет массив верхнего уровня, поэтому вы не можете анализировать как словарь. Попробуй сделать это

let resultJson = try JSONSerialization.jsonObject(with: data, options: []) as? [Any]
dump(resultJson!)

Пример кода будет примерно таким. Не забудьте разобраться с вещами

let str = "[{\"Part\":{\"id\":\"418502\",\"uuid\":\"21ec7cdb-cd2d-4b12-8a90-775762eb0f26\"},\"Category\":{\"category_name\":\"Regulators\",\"category_code\":\"RG\"}},{\"Part\":{\"id\":\"418502\",\"uuid\":\"21ec7cdb-cd2d-4b12-8a90-775762eb0f26\"},\"Category\":{\"category_name\":\"Regulators\",\"category_code\":\"RG\"}}]"

let data = str.data(using: .utf8)

do{
    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [Any]
    let dicInFirstElement = json?[0] as? [String: Any]
    let part = dicInFirstElement?["Part"]
    dump(part)
    //Pass this json into the following function
}catch let error{

}
Другие вопросы по тегам