2017-08-04 114 views
1

返回null我使用此功能后值发送到服务器:在我的其他控制器swiftyJson嵌套JSON

func getFirstPageApplication(EMPTY:String,completionHandler: @escaping (_ response: String) ->()) 
{ 
    var strResponse = "null" 
    var request = URLRequest(url: URL(string: self.baseURL+"getFirstPageApplication")!) 
    request.httpMethod = "POST" 
    let postString = "EMAIL=\(EMPTY)" 
    request.httpBody = postString.data(using: .utf8) 
    let task = URLSession.shared.dataTask(with: request) { data, response, error in 
     guard let data = data, error == nil else {             // check for fundamental networking error 
      print("error=\(error)") 
      return 
     } 

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

     let responseString = String(data: data, encoding: .utf8) 
     strResponse = responseString! 
     completionHandler(strResponse) 
    } 
    task.resume() 


} 

我用这个功能来使用上面的方法:

func initialFirstView() 
{ 
    RestApiManager.sharedInstance.getFirstPageApplication(EMPTY:"-"){ 
     response in 

     let json = JSON(response) 

     print("res: \(json["sliders"])") 

    } 
} 

我得到响应值,但json["sliders"]返回null,我不知道!

我的响应值:

{"sliders":[{"id":4,"title":"\u0647\u0645\u06cc\u0634\u0647 \u0628\u0647 \u0622\u0648\u0627\u0632 \u0628\u0627 \u0627\u0633\u062a\u0627\u062f\u06a9\u062a","image":"1500801181_ostadcat_slider_1.jpg","status":1,"created_at":"2017-07-23 04:43:01","updated_at":"2017-07-23 04:43:01"},{"id":6,"title":"\u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u0647\u0645\u0647, \u0647\u0645\u0647 \u0628\u0631\u0627\u06cc \u06cc\u06a9\u06cc","image":"1500801699_ostadcat_slider_3.jpg","status":1,"created_at":"2017-07-23 04:51:39","updated_at":"2017-07-23 04:51:39"},{"id":7,"title":"\u062d\u0631\u0641\u0647 \u0627\u06cc \u062a\u0631\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u0648\u0633\u06cc\u0642\u06cc","image":"1500801728_ostadcat_slider_4.jpg","status":1,"created_at":"2017-07-23 04:52:08","updated_at":"2017-07-23 04:52:08"},{"id":8,"title":"\u062a\u0648 \u0647\u0645 \u0645\u06cc \u062a\u0648\u0646\u06cc \u0645\u062b\u0644 \u0645\u0646 \u0628\u0627\u0634\u06cc!!!","image":"1500801751_ostadcat_slider_2.jpg","status":1,"created_at":"2017-07-23 04:52:31","updated_at":"2017-07-23 04:52:31"}],"tutorials":[{"id":1,"home_image":"1500806287_img_home_test_6.png","tutorial_image":"1500809220_Hot-Romanian-Inna-in-black-goggles-wallpapers.jpg","tutorial_title":"\u062e\u0648\u0627\u0646\u0646\u062f\u06af\u06cc","tutorial_description":"\u0622\u0645\u0648\u0632\u0634 \u062c\u0627\u0645\u0639 \u062e\u0648\u0627\u0646\u0646\u062f\u06af\u06cc","video":"1500810916_innaHot2.mp4","video_title":"\u062e\u0648\u0627\u0646\u0646\u062f\u06af\u06cc \u0631\u0627 \u062d\u0631\u0641\u0647 \u0627\u06cc \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u062f","teacher_image":"1500808975_inna-dark-hair-white-dresses-digital-art.jpg","teacher_name":"\u0627\u06cc\u0646\u0627","teacher_bio":"\u0628\u0647\u062a\u0631\u06cc\u0646 \u0627\u0632 \u0633\u0627\u0644 2009 \u062a\u0627 \u0628\u0647 \u0627\u0644\u0627\u0646","status":1,"created_at":"2017-06-29 17:31:20","updated_at":"2017-07-23 11:55:16"},{"id":2,"home_image":"1500802877_img_home_test_1.jpg","tutorial_image":"1500802877_Image.png","tutorial_title":"\u0622\u0645\u0648\u0632\u0634 \u06af\u06cc\u062a\u0627\u0631 \u0627\u0633\u0644\u0634","tutorial_description":"\u06af\u06cc\u062a\u0627\u0631 \u0627\u0633\u0644\u0634 \u0631\u0627 \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u062f!!!","video":"1500804433_oneRepublic.mp4","video_title":"\u0646\u0645\u0648\u0646\u0647 \u0622\u0645\u0648\u0632\u0634 \u06af\u06cc\u062a\u0627\u0631","teacher_image":"1500802882_maxresdefault.jpg","teacher_name":"\u0648\u0627\u0646 \u0631\u06cc\u067e\u0627\u0628\u0644\u06cc\u06a9","teacher_bio":"\u06af\u0631\u0648\u0647 \u0648\u0627\u0646 \u0631\u06cc\u067e\u0627\u0628\u0644\u06cc\u06a9 \u0634\u0627\u0645\u0644 5 \u0639\u0636\u0648","status":1,"created_at":"2017-06-29 17:35:09","updated_at":"2017-07-23 05:37:13"}]} 

@Reinier梅丽安 解决

func getFirstPageApplication(EMPTY:String,completionHandler: @escaping (_ response: AnyObject) ->()) 
    { 
     var strResponse = "null" 
     var request = URLRequest(url: URL(string: self.baseURL+"getFirstPageApplication")!) 
     request.httpMethod = "POST" 
     let postString = "EMAIL=\(EMPTY)" 
     request.httpBody = postString.data(using: .utf8) 
     let task = URLSession.shared.dataTask(with: request) { (data, response, error) in 
      if error != nil { 
       DispatchQueue.main.async { 
        completionHandler({} as AnyObject) 
       } 

      } else { 
       if let usableData = data { 
        do { 

         let jsonResult = try JSONSerialization.jsonObject(with: usableData, options: 
          JSONSerialization.ReadingOptions.mutableContainers) 
         //print("worked") 
         //print(jsonResult) //this part works fine 
         DispatchQueue.main.async { 
          completionHandler(jsonResult as AnyObject) 
         } 

        } catch { 
         DispatchQueue.main.async { 
          completionHandler({} as AnyObject) 
         } 
         print("JSON Processing Failed") 
        } 
       } 
      } 
     } 
     task.resume() 

    } 

回答

1

使用AnyObject尝试,而不是在你完成处理String并添加JSONSerialization序列化到JSON

func getFirstPageApplication(EMPTY:String,completionHandler: @escaping (_ response: AnyObject) ->()) 
{ 
    var strResponse = "null" 
    var request = URLRequest(url: URL(string: self.baseURL+"getFirstPageApplication")!) 
    request.httpMethod = "GET" 
    let postString = "EMAIL=\(EMPTY)" 
    request.httpBody = postString.data(using: .utf8) 
    let task = URLSession.shared.dataTask(with: request) { data, response, error in 
     guard let data = data, error == nil else {             // check for fundamental networking error 
      print("error=\(error)") 
      return 
     } 

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

     do { 
      let json:AnyObject? = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 
      if let parseJSON = json{ 
       print(parseJSON) 
      } 
      completionHandler(parseJSON) 
     } 

    } 
    task.resume() 

} 

然后,你必须能够使用这个没有问题

func initialFirstView() 
{ 
    RestApiManager.sharedInstance.getFirstPageApplication(EMPTY:"-"){ 
     response in 
     print("res: \(response["sliders"])") 
    } 
} 

此代码是没有测试,所以请让我知道,如果作品

希望这有助于