[英]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.