解析Alamofire结果到Swift中的对象(使用:Alamofire,SwiftyJSON和ObjectMapper)
问题描述:
解析传入的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)
}
})
}
通常我把结果成JSON第一,但尝试这样做,每当这个时候,我得到的编译错误:
答
这确实是我在函数上面声明的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。或者用手做类似的事情。 –
你已经有了一个叫做JSON变量,它是一个NSData的 – Horst