@Wolfak

Каким спосабом обработать JSON в Swift 3?

Здравствуйте. Очень долго разбирался как обработать JSON результат запроса на сервер с помощью Alamofire.
У меня возвращается Json в котором есть внутренние json строки.

В массивном представлении мой JSON имеет вид:
var myArray = ["People0" : ["id": "1", "Name": "Alex"], "People1" : ["id": "2", "Name": "Serg"]] и т.д.

Я только разбираюсь с Swift и работа с JSON показалась мне в нем невероятно сложной. Единственный рабочий для меня способ выглядит так:

let parameters: Parameters = ["parametr1": "1", "parametr2": "2", "parametr3": "3"]
        
        Alamofire.request("http://link.php", method: .post, parameters: parameters).responseJSON { response in
            
            switch response.result {
            case .success:
                
                if let objJson = response.result.value as! NSDictionary? {
                    
                    //for element in objJson {
                    
                    for index in 0...(objJson.count)-1 {
                        let data = objJson["People" + String(index)] as! String
                        let dataNS = data.data(using: .utf8)
                        
                        
                        do {
                            let cont = try JSONSerialization.jsonObject(with: dataNS!, options: []) as? [String: Any]
                            
                            let contData = cont as! [String:String]
                            
                            self.names.append(String((index + 1)) + ". " + contData["Name"]!)
                            self.ids.append(Int(contData["id"]!)!)
                            
                        } catch {
                        }
                        
                    }
                    
                    self.tableView.reloadData()
                }
                

                
            case .failure( _):
                
                var errorString = "NULL"
                
                if let data = response.data {
                    if let json = try? JSONSerialization.jsonObject(with: data, options: []) as! [String: String] {
                        errorString = json["error"]!
                    }
                }
                
            }
            
        }


Мне кажется что мой код можно было реализовать и гораздо проще, но я не знаю как. Надеюсь на вашу помощь. Спасибо.
  • Вопрос задан
  • 593 просмотра
Решения вопроса 1
Подключите либу для парсинга JSON, например, раз, два, три.

case .success:
    let json = JSON(response.result.value)
    let username: String? = json["People0"]["Name"].string
    // ...


Обнаружилось, что передаваемый JSON был в не совсем корректном формате, из-за этого придётся делать вот так:

case .success:
    let json = JSON(response.result.value)
    let nestedJson = JSON(parseJSON: json["People0"].string ?? "{}")
    let username: String? = nestedJson["Name"].string
    // ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы