我正在使用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
答案 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
,因此您必须了解它。