Ios 使用tableview swift解析json数据无法将类型为“\uu NSCFString”的值强制转换为“NSArray”
我有这样一个json:Ios 使用tableview swift解析json数据无法将类型为“\uu NSCFString”的值强制转换为“NSArray”,ios,json,swift,Ios,Json,Swift,我有这样一个json: {"page":1,"totalPage":1,"listContent":[{"bizID":3,"bizName":"SHELL KEMANGGISAN","bizImage":"http//:www.goog@gmail.com","address":"JL KEMANGGISAN UTAMA, JAKARTA, 11480, INDONESIA","ratingAvg":1.0,"distance":14003691},{"bizID":4,"bizName":"
{"page":1,"totalPage":1,"listContent":[{"bizID":3,"bizName":"SHELL KEMANGGISAN","bizImage":"http//:www.goog@gmail.com","address":"JL KEMANGGISAN UTAMA, JAKARTA, 11480, INDONESIA","ratingAvg":1.0,"distance":14003691},{"bizID":4,"bizName":"SHELL DAAN MOGOT","bizImage":"http//:www.goog@gmail.com","address":"JL DAAN MOGOT KM 11, JAKARTA, 11710","ratingAvg":3.0,"distance":14004238}]}
我试图捕捉这样的结果,但出现了以下错误:
do {
let jsonArr = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSArray
print("jsonArr:\(jsonArr)")
for json in jsonArr {
if let results = json["listContent"] as? NSArray {
for result in results {
let person = Bizz()
person.bizID = result["bizID"] as! String
person.bizName = result["bizName"] as! String
person.bizImage = result["bizImage"] as! String
person.address = result["address"] as! String
person.ratingAvg = result["ratingAvg"] as! String
self.businessBizz.append(person)
}
}
}
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
} catch {
print("Failed to get Content List: \(error)")
}
错误是:
无法将类型为“\uu NSCFString”0x10756f2c8的值强制转换为“NSArray”0x10756fb88
此行中的错误:
let jsonArr = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSArray
怎么修理?获取listcontent值。您的JSON是[String:AnyObject]表示字典而不是数组
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: [])
if let results = json["listContent"] as? [[String: AnyObject]] {
for result in results {
let person = Bizz()
person.bizID = result["bizID"] as! Int
person.bizName = result["bizName"] as! String
person.bizImage = result["bizImage"] as! String
person.address = result["address"] as! String
person.ratingAvg = result["ratingAvg"] as! Float
self.businessBizz.append(person)
}
}
您还应该将result[ratingAvg]和result[bizID]分别转换为Int和Float,因为它们在解析时会转换为NSNumber
您可以从下载游乐场并自己测试。因为它返回的是字典,而不是数组。删除为!NSArray部分。在jsonArr循环中也删除json。您的json是一个顶级字典,显然存在一些问题。那么,我必须更改什么?@ozgur,实际上,NSJSONSerialization是Objective C类型,它返回的NSDictionary只包含对象类型。数字是NSNumber,字符串是NSString,null是NSNull。@Sarimin有错误吗???还是同一个问题???我不知道为什么它对你不起作用,因为你的顶层是字典,而listContent是数组,所以这应该对我起作用think@EICaptainv2.0错误是:获取内容列表失败:错误域=nscocaerordomain Code=3840 JSON文本未以数组或对象开头,并且未设置允许片段的选项。UserInfo={NSDebugDescription=JSON文本没有以数组或对象和选项开头以允许不设置片段。}@Sarimin,尝试将选项设置为.AllowFragments,而不是[],就像您的问题一样。@user28434错误和错误。NSJSONSerialization返回Swift 2中的任意对象,Swift 3中的任意对象。一点也不。然后将AnyObject/Any转换为正确的类型,最好是Swift类型。此外,如果JSON的根是正确的对象,那么AllowFragments是100%无用的。