Задать вопрос
dedmoroz007
@dedmoroz007
Лыжник-программист

Как обработать JSON данные полученные с помощью Alamofire в Swift3?

Подключены две библиотеки: Alamofire 4.4 и SwiftyJSON.
Используя пример из документации получил в utf8 данные с сервера:
Alamofire.request(getCitiesURL).responseData { response in
     debugPrint("All Response Info: \(response)")    
     if let data = response.result.value, let utf8Text = String(data: data, encoding: .utf8) {
           print("Data: \(utf8Text)")
     }
}


Данные вида:
Data: [{"_id":"591860c5636fa2660534cedd","id":"96","name":"Нижний Тагил"},{"_id":"591860c5636fa2660534cede","id":"1","name":"Москва"},{"_id":"591860c5636fa2660534cedf","id":"2","name":"Санкт-Петербург"},{"_id":"591860c5636fa2660534cee0","id":"10","name":"Волгоград"},{"_id":"591860c5636fa2660534cee1","id":"37","name":"Владивосток"},{"_id":"591860c5636fa2660534cee2","id":"153","name":"Хабаровск"},{"_id":"591860c5636fa2660534cef0","id":"133","name":"Сочи"}]

Прошу помочь.
Как вытащить свойства (id и name) из строки json, чтобы дальше их можно было в массивы записать? Например при помощи SwiftyJSON.

P.s. При попытке обратится к свойству получаю ошибку - Cannot subscript a value of type String with an index of type String
if let data = response.result.value, let utf8Text = String(data: data, encoding: .utf8) {
        print("Data: \(utf8Text["id"])")
}
  • Вопрос задан
  • 2587 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@andrew8712
Ну и правильно, потому что `utf8Text` - это константа типа String, к ней нельзя обратиться вот так: utf8Text["id"].
Вам нужно response.value привести к dictionary [String: Any], либо, что еще проще, использовать responseJSON вместо responseData:

Alamofire.request("https://httpbin.org/get").responseJSON { response in
    print(response.request)  // original URL request
    print(response.response) // HTTP URL response
    print(response.data)     // server data
    print(response.result)   // result of response serialization

    if let JSON = response.result.value {
        print("JSON: \(JSON)")
    }
}


Взято отсюда: https://github.com/Alamofire/Alamofire#response-ha...
Ответ написан
Комментировать
@zhenyakim
ae6fb79bb6e943eaadb1076c62820b40.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы