2 votes

Comment analyser en JSON à partir de la demande post swift 3

J'ai le code suivant ici qui est le résultat d'une requête POST envoyée à phpMyAdmin. Le fichier JSON suivant est renvoyé par le serveur.

{"account:[{"login":"Nik","id":"0","consent":"0","surveyScore":"0","memoryScore":"0","towerScore":"0","tappingScore":"0"}]}

Maintenant, je parviens à récupérer correctement le JSON sur mon téléphone, mais j'ai du mal à le parser.

J'ai suivi le guide répertorié ici Exemple Json Xcode

Voici mon code jusqu'à présent:

public func sqlAccount(login: String, pass: String, model:userModel ) {

// REQUÊTE POST uniquement, voir le fichier php pour le service Web.
let loci = "http://IPAddressConcealed/"
let appended =  loci + "account.php"

var request = URLRequest(url: URL(string: appended)!)
request.httpMethod = "POST"
let postString = "login=\(login)&pass=\(pass)"
request.httpBody = postString.data(using: .utf8)!

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let reponse = response {
        print(reponse)
    }
    if let data = data {
        //print(data)

        do{
            var accountJson: NSDictionary!
            let json = try JSONSerialization.jsonObject(with: data, options: [])
            accountJson = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSDictionary
            print(json)

            //obtention du tableau JSON account de la réponse 

            let account: NSArray = accountJson["account"] as! NSArray;

            // ces deux lignes me posent problème
            let login: String = account[0]["login"] as! String   
            let memoryScore: Int = account[0]["memoryScore"] as! Int

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

Voici le résultat de la sortie dans le terminal xcode après avoir simplement imprimé les données JSON.

        `{account =     (
            {
        consent = 0;
        id = 0;
        login = Nik;
        memoryScore = 0;
        surveyScore = 0;
        tappingScore = 0;
        towerScore = 0;
    }
     ); }`

Code PHP côté serveur:

fetch_object())
                                    {
                                        // Ajoute chaque ligne dans notre tableau de résultats
                                    $tempArray = $row;
                                        array_push($response['account'], $tempArray);
                                    }

                                    // Enfin, encode le tableau en JSON et affiche les résultats
                                    printf(json_encode($response));
}

// Fermer les connexions
mysqli_close($con);

?>

1voto

Fangming Points 10276

Essayez de remplacer vos lignes d'erreur par ceci. Dans votre code, vous devriez supprimer le déballage forcé et vérifier les valeurs avec if let. Ma réponse est juste une aide rapide pour résoudre votre erreur.

let firstDic = account[0] as! NSDictionary
let login = firstDic["login"] as! String
let memoryScore = firstDic["memoryScore"] as! String

print(login + " --- " + memoryScore)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X