簡體   English   中英

如何將 Json 響應轉換為 Swift 3.0,較舊的轉換會引發錯誤?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM