在 Swift 中将 Alamofire 结果解析为对象(使用:Alamofire、SwiftyJSON 和 ObjectMapper)
Posted
技术标签:
【中文标题】在 Swift 中将 Alamofire 结果解析为对象(使用:Alamofire、SwiftyJSON 和 ObjectMapper)【英文标题】:Parsing Alamofire result into objects in Swift (using: Alamofire, SwiftyJSON & ObjectMapper) 【发布时间】:2016-10-04 01:39:09 【问题描述】:我在解析传入的 JSON 时遇到问题。
这是我的功能:
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 的变量,它是一个 NSData 【参考方案1】:这确实是我在函数上方声明的 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)
)
【讨论】:
你这里没有使用 SwiftyJSON。在此示例中,您将 JSON 解析为 JSON 对象,稍后仅使用字符串表示,因此 ObjectMapper 将再次解析它(这次从字符串)。考虑使用包 github.com/tristanhimmelman/AlamofireObjectMapper 。或者用手做类似的事情。以上是关于在 Swift 中将 Alamofire 结果解析为对象(使用:Alamofire、SwiftyJSON 和 ObjectMapper)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Alamofire,swift 3 中将字典作为参数发送
Swift:JSON 解析未显示在 UILabel 中,但可以使用 Alamofire 在输出窗口中看到