[英]How to Convert Json response to Swift 3.0, older conversion is throwing Error?
这个程序是一个 HTTP 连接。 如何将(响应字符串(变量))转换为数组?
let myUrl = NSURL(string: "http://467.143.211.12/nvn/modules/pm/")
let requset = NSMutableURLRequest(URL: myUrl!)
requset.HTTPMethod = "POST"
let postString = "request=data&from=now&serial=\(p)&password=\(i)&imei=testimei"
requset.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(requset) {
data, response, error in
if error != nil {
println("eror=\(error)")
return
}
println("responce = \(response)")
let responcsestring = NSString(data: data, encoding: NSUTF8StringEncoding)
println("responce data = \(responcsestring)");
当我使用此代码时:
var error: NSError?
let jsonData: NSData = data
let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as! NSDictionary
我面临这个消息:
无法将“__NSCFArray”(0x110870650)类型的值转换为“NSDictionary”(0x1108708d0)。
当我参考解决方案时,在 swift 中使用的旧转换代码不适用于 Swift 2.0 版。
var error: NSError?
let jsonData: NSData = data
let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary
处理 JSON 时,您总是转换原始NSData
。 不要尝试将其转换为字符串并进行转换。 这是浪费时间和空间,并且可能会引入错误。
转换在类NSJSONSerialization
。 由于NSJSONSerialization
不知道它是解析字典还是数组,因此它会返回。
另一个回复中的代码试图将结果转换为NSDictionary
,如果你有一个数组,这显然会失败。 这就是你收到的消息。 回到你的基本 Swift 来看看它是什么as!
和as?
做来解决这个问题。
但说真的,如果你要求一个数组,而有人发布了一个试图给你一本字典的答案,你应该弄清楚如何调整这个答案。 这里的任何答案只是为了让您进入正确的方向; 编写代码仍然是您的责任和代码。
这是一种异步类型,因此请在 do、catch 中使用它。 从 JSON 文件中提取信息时,请始终尝试使用异步类型。 然后你可以增强你的应用程序的用户体验和响应能力
do {
let jsonData:AnyObject? = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers)
if let list = jsonData as? NSArray // or PUT NSDictionary ( according to your JSON )//
{
// DO YOUR DATA HANDLING
}
} catch let error as NSError {
print("error")
} catch {
// Something else happened.
// Insert your domain, code, etc. when constructing the error.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.