2016-10-04 94 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。或者用手做类似的事情。 –