2016-10-04 45 views
0

解析傳入的JSON時出現問題。解析Alamofire結果到Swift中的對象(使用:Alamofire,SwiftyJSON和ObjectMapper)

這是我的函數:

func postCheckUserPhonenumbers(phonenumbers:[String], completionHandler: (([AnyObject?], AnyObject?) -> Void)) { 
     let urlString = Constant.apiUrl().stringByAppendingFormat(Constant.apiPostCheckUserPhonenumbers) 

     let phoneNumbersDictionary = phonenumbers.map({ ["number": $0] }) 

     let JSON = try? NSJSONSerialization.dataWithJSONObject(phoneNumbersDictionary, options: []) 

     let request = NSMutableURLRequest(URL: NSURL(string: urlString)!) 
     request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
     request.HTTPMethod = "POST" 
     request.HTTPBody = JSON 

     Alamofire.request(request).validate().responseJSON(completionHandler: {response in 
      if response.result.isSuccess{ 
       if let value = response.result.value { 
//     let json = JSON(value) 
        if let users:Array<User> = Mapper<User>().mapArray(value) { 
         completionHandler(users, nil) 
        } else { 
         completionHandler([nil], nil) 
        } 
       } 
      } 
      if response.result.isFailure{ 
       let message = ApiMessage() 
       message.message = "No users found" 
       completionHandler([nil],message) 
      } 
     }) 
    } 

enter image description here

通常我把結果成JSON第一,但嘗試這樣做,每當這個時候,我得到的編譯錯誤:

enter image description here

+2

你已經有了一個叫做JSON變量,它是一個NSData的 – Horst

回答

0

這確實是我在函數上面聲明的JSON變量。現在我有這樣的:

func postCheckUserPhonenumbers(phonenumbers:[String], completionHandler: (([AnyObject?], AnyObject?) -> Void)) { 
    let urlString = Constant.apiUrl().stringByAppendingFormat(Constant.apiPostCheckUserPhonenumbers) 

    let phoneNumbersDictionary = phonenumbers.map({ ["number": $0] }) 

    let inputJSON = try? NSJSONSerialization.dataWithJSONObject(phoneNumbersDictionary, options: []) 

    let request = NSMutableURLRequest(URL: NSURL(string: urlString)!) 
    request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.HTTPMethod = "POST" 
    request.HTTPBody = inputJSON 

    Alamofire.request(request).validate().responseJSON(completionHandler: {response in 
     if response.result.isSuccess{ 
      if let value = response.result.value { 
       let json = JSON(value) 
       let jsonString = json.rawString() 
       if let users:Array<User> = Mapper<User>().mapArray(jsonString) { 
        completionHandler(users, nil) 
       } else { 
        completionHandler([nil], nil) 
       } 
      } 
     } 
     if response.result.isFailure{ 
      let message = ApiMessage() 
      message.message = "No users found" 
      completionHandler([nil],message) 
     } 
    }) 
} 
+0

你是不是在這裏使用SwiftyJSON。在本例中,您將JSON解析爲JSON對象,稍後僅使用字符串表示形式,以便ObjectMapper將再次解析它(此時爲字符串)。考慮使用包https://github.com/tristanhimmelman/AlamofireObjectMapper。或者用手做類似的事情。 –