Json在swift中解析没有数组

时间:2016-09-05 11:45:32

标签: ios json swift

我正在使用json解析代码,如下所示,但它使用数组并在使用时给我。

  

无法转换类型' __ NSCFDictionary'的值(0x10ad77178)到NSArray' (0x10ad76b88)错误

我的json文件(只会更改我的json中的十进制值)

{
  "One": 30.00,
  "Two": 6.00,
  "Two2": 36.00
}

我的Swift代码如下

            let url:NSURL = NSURL(string: "http://url.com")!
            let session = NSURLSession.sharedSession()

            let request = NSMutableURLRequest(URL: url)
            let task = session.downloadTaskWithRequest(request) {
                (
                let location, let response, let error) in

                guard let _:NSURL = location, let _:NSURLResponse = response  where error == nil else {
                    print("error")
                    return
                }

                let urlContents = try! NSString(contentsOfURL: location!, encoding: NSUTF8StringEncoding)

                guard let _:NSString = urlContents else {
                    print("error")
                    return
                }

                let data = urlContents.dataUsingEncoding(NSUTF8StringEncoding)
                do {
                    let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)

                    for name in json as! [AnyObject] {
                        if let Onebir = name["One"] as? String {
                            self.One1.text = Onebir

                        }

                    }

                    for names in json as! [AnyObject] {
                        if let Twoiki = names["Two"] as? String {
                            self.Two2.text = Twoiki

                        }

                    }

                    for namesu in json as! [AnyObject] {
                        if let Two2uc = namesu["Two2"] as? String {
                            self.Two23.text = Two2uc

                        }

                    }



                } catch {
                    print("error serializing JSON: \(error)")
                }





            }

            task.resume()

我尝试删除名称..为名称..为namesu ..但它没有解决它。

我需要明白,想要这样的输出。

self.One1.text  = 30.00
self.Two2.text  = 6.00
self.Two23.text = 36.00

2 个答案:

答案 0 :(得分:1)

您的回复为Dictionary而不是Array,因此请访问此类Dictionary,您的值为float,而不是String

let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as [String: Float]

dispatch_async(dispatch_get_main_queue(),{
    self.One1.text = "\(json["One"])"
    self.Two2.text = "\(json["Two"])"
    self.Two3.text = "\(json["Two2"])"
})

答案 1 :(得分:1)

错误本身表明回复的格式为NSDictionary而不是NSArray,而您正试图获取该回复。

可能[]方括号在Array中提供数据,而{}符号大括号始终包含dictionary,因此您必须了解它。