0
votes

Alamofire Parse Json msg et statut

Je veux afficher le msg sur uitextview code> à l'aide du statut, mais il affiche "SUCCESS: 200":

{"Statut": 500, "MSG": "\" Les informations sont invalides \ ""} p> BlockQuote>

J'utilise SWIFT4 dans XCode10, voici mon code: P>

import UIKit
import Alamofire
import SwiftyJSON

class VerifyAccount: UIViewController {

    let verify_url = "http://192.168.43.222:3000/mobile/account_verification"

    @IBOutlet weak var msgHandler: UITextView!

    func postData(url: String ,  parameters: [String : String]) {
        Alamofire.request(url, method: .post, parameters: parameters).responseJSON {
            response in
            if response.result.isSuccess {
                let postJSON : JSON = JSON(response.result.value!)
                print(postJSON)

                if let status = response.response?.statusCode {
                    switch(status) {
                    case 200:
                        self.msgHandler.text = ("Success: \(status)")
                    case 500:
                        self.msgHandler.text = ("Invalid: \(status)")
                    default:

                    }
                }
            } else {
                print("Error: \(String(describing: response.result.error))")
            }
        }
    }

    @IBAction func verifyBtn(_ sender: Any) {
        let compare : [String : String] = ["id" : id , "fname" : fname , "lname" : lname]

        postData(url: verify_url , parameters : compare)
    }
}


2 commentaires

Essayez d'utiliser postjson ["msg"]. chaîne


Apparemment, le code d'état de la réponse et le statut dans le JSON est différent.


4 Réponses :


0
votes

Vous pouvez obtenir une valeur en toute sécurité forte> (qu'il s'agisse d'une chaîne code>, int code>, etc ...) de votre json Objet comme:

let status = postJSON["status"].int ?? 0
let message = postJSON["msg"].string ?? "No Message"


0 commentaires

0
votes

Vous devez changer votre façon de gérer votre réponse. J'ai mis à jour votre code, cela devrait fonctionner.

import UIKit
import Alamofire
import SwiftyJSON

class VerifyAccount: UIViewController {

let verify_url = "http://192.168.43.222:3000/mobile/account_verification"

@IBOutlet weak var msgHandler: UITextView!

func postData(url: String ,  parameters: [String : String]) {
    Alamofire.request(url, method: .post, parameters: parameters).responseJSON {
        response in

 switch response.result {
        case .success:
            print("server response: \(response.value!)")


            do {
                if var json = try JSONSerialization.jsonObject(with: response.data!, options: [])  as? [String:Any] {


                    // Get value by key
                    var message = "";
                    if let msg = json["msg"] as? String
                    {
                        message = msg; // your message is here, you can do anything with it, whatever you want.
                    }

                    var status = 0;
                    if let st = json["status"] as? Int
                    {
                        status = st;
                    }


                }

            } catch let error as NSError {

            }



            break

        case .failure(let error):
            self.delegate.APIOnError(requestCode: requestCode);
            print("server error: \(error.localizedDescription)")

        }
    }
  }


0 commentaires

0
votes

Analysez vos données de réponse telles que

guard data _ = response.result.value as? [String: Any] else {
     print("Error: \(String(describing: response.result.error))")
     return
}

let message = data["msg"] as? String ?? "Unable to parse message"
if let statusCode = data["status"] as? Int {
    switch statusCode {
        case 200: self.msgHandler.text = ("Success: \(message)")
        case 500: self.msgHandler.text = ("Invalid: \(message)")
        default:self.msgHandler.text = ("Invalid status code")
    }
}


0 commentaires

0
votes

Vous utilisiez de mauvaises données pour analyser. Vous pouvez essayer ceci: xxx


0 commentaires