Alfi Alfi - 1 year ago 64
Swift Question

How to use this JSON response?

I want to use donation payment with my custom website.

There is a URL I should connect to and pass 2 value with the name "sku" & "device_id".

As asnwer the web gives me a value with name of "status" and a paycode with a value like this "726287618769179".

If "status" equals "READY_TOPAY" I should go to next url+paycode and
then user can fill card number and password and etc.

I use this code to connect and communicate with the web:

let DID = UIDevice.currentDevice().identifierForVendor!.UUIDString
print("Device ID is : \(DID)")

let url = NSURL (string: "");
let requestObj = NSURLRequest(URL: url!);

let request = NSMutableURLRequest(URL: NSURL(string: "")!)
request.HTTPMethod = "POST"
let postString = "mypayid&device_id=\(DID)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
guard error == nil && data != nil else { // check for fundamental networking error

if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")

let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(responseString)")
if (responseString?.UTF8String.) {


The problem is I get the first JSON answer like this:

responseString = Optional({"error":false,"status":"READY_TO_PAY","pay_code":"4443697552108","prd_status":1})

I don't know what to do with this!

How should I tell if "status" equals "READY_TO_PAY" go to next url+paycode?

Answer Source

Instead of making a String from your JSON data with NSString(data: data!, encoding: NSUTF8StringEncoding), decode the JSON data to a dictionary, and access its contents by safely subscripting:

if let json = try? NSJSONSerialization.JSONObjectWithData(data!, options: []) {
    if let content = json as? [String:AnyObject],
        status = content["status"] as? String,
        payCode = content["pay_code"] as? String {

Now you can easily compare status with "READY_TO_PAY" and take necessary actions.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download