Ios 使用tableview swift解析json数据无法将类型为“\uu NSCFString”的值强制转换为“NSArray”

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":"

我有这样一个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":"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%无用的。