在Swift 2中解析JSON数据

时间:2016-05-13 07:46:55

标签: ios json nsdictionary nsjsonserialization

我正在解析数据,我也得到了responseString。但是我的问题是我想将它转换为字典然后我想从那个jsonObject中获取值。 但我无法做到这一点。

我的代码如下

 func loginRequest(url:String, withParams params: [String: String?], postCompleted : (succeeded: Bool, msg: String) -> ()){

        let request = NSMutableURLRequest(URL: NSURL(string: url)!)

        let session = NSURLSession.sharedSession()

        request.HTTPMethod = "POST"



        var err: NSError?

        var bodyData = ""

        for (key,value) in params{

            if (value == nil){ continue }

            let scapedKey = key.stringByAddingPercentEncodingWithAllowedCharacters(

                .URLHostAllowedCharacterSet())!

            let scapedValue = value!.stringByAddingPercentEncodingWithAllowedCharacters(

                .URLHostAllowedCharacterSet())!

            bodyData += "\(scapedKey)=\(scapedValue)&"

        }



        request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)



        let task = session.dataTaskWithRequest(request,

            completionHandler: {data, response, error -> Void in

                let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)

                postCompleted(succeeded: true, msg: dataString! as String)

                print(dataString!)



                if let datas = dataString!.dataUsingEncoding(NSUTF8StringEncoding) {



                    do{

                        let json = try NSJSONSerialization.JSONObjectWithData(datas, options: []) as? [String:AnyObject]

                        //return json

                        print(json)

                    }

                    catch

                    {

                         print("Something went wrong")

                    }



                }





                          })



        task.resume()

    }

我正在调用这样的方法

self.loginRequest("http://stream.gsr-india.com:8080/pgn_service/REST/WebService/GetUserDetails",

                withParams: ["first_name":firstNameTextField.text,"last_name":lastNameTextField.text , "application_id":uniqueIdTextField.text])

                {

                    (succeeded: Bool, msg: String) -> () in

                    if(succeeded) {

                        if msg == "0"

                        {

                            //Incorrect data...

                        }

                        else

                        {

                            //The login it's ok...



                        }

                    }

            }

任何人都可以帮我解决这个问题。 在此先感谢。

1 个答案:

答案 0 :(得分:1)

将方法声明更改为

 func loginRequest(url:String, withParams params: [String: String?], postCompleted : (succeeded: Bool, msg: NSDictionary?) -> ()){

然后将任务处理程序更改为

let task = session.dataTaskWithRequest(request,

    completionHandler: {data, response, error -> Void in

        let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
      print(dataString!)
           do{
               let json = try NSJSONSerialization.JSONObjectWithData(datas, options: []) as? [String:AnyObject]
               postCompleted(succeeded: true, msg: json)
                print(json)
           }
           catch {
                print("Something went wrong")
           }
       }
     })

将回调更改为

        (succeeded: Bool, msgDict: NSDictionary?) -> () in
                   if let dict =  msgDict {
                      // call any value like dict["error"] etc
                   }