Как получить все данные из JSON на Swift 3? - PullRequest
0 голосов
/ 27 июня 2018

Я регистрирую некоторые данные пользователя в базе данных, и после этого API возвращает другие данные в стандартном JSON-формате, например:

enter image description here

И я пытаюсь получить idUsuario, nome и cpf из этого JSON и распечатать, чтобы увидеть, верны ли они, но они не отображаются на консоли!

@IBAction func botaoSalvar(_ sender: Any) {

    let nomeUsuario = self.campoUsuario.text;
    let cpf = self.campoCPF.text;
    let senha = self.campoSenha.text;

    let parameters = ["nome": nomeUsuario, "cpf": cpf, "senha": senha, "method": "app-set-usuario"]
    let urlPost = "http://easypasse.com.br/gestao/wsCadastrar.php"
    guard let url = URL(string: urlPost) else { return }
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

    guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
    request.httpBody = httpBody

    let session = URLSession.shared
    session.dataTask(with: request) {
        (data, response, error) in

        if let data = data {
            do {
                let dadosJson = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

                if let usuario = json["usuario"] as? [String: Any] {
                    let idUsuario = usuario["idUsuario"] as? Int
                    let nome = usuario["nome"] as? String
                    let cpf = usuario["cpf"] as? Int
                    print(idUsuario as! Int, nome as! String, cpf as! Int)
                }


            } catch {
                print(error)
            }
        }
    }.resume()

1 Ответ

0 голосов
/ 27 июня 2018

Значение ключа usuario - это массив, обратите внимание на (, словарь - {. Обвините владельца сервиса в путанице в единственном / множественном числе ?.

Это ваш код с несколькими свифтификациями (родные типы коллекций и нет никогда .mutableContainers):

if let data = data {
        do {
            if let dadosJson = try JSONSerialization.jsonObject(with: data) as? [String:Any], 
               let usuarios = dadosJson["usuario"] as? [[String:Any]] {
                  for usuario in usuarios {
                     if let nomeUsuario = usuario["nome"] as? String {
                         print(nomeUsuario)
                     }
                     if let idUsuario = usuario["idUsuario"] as? Int { // can also be `String`
                         print(idUsuario)
                     }
                     if let cpf = usuario["cpf"] as? Int { // can also be `String`
                         print(cpf)
                     }
                  }
            }

        } catch {
            print(error)
        }
    }
...