Swift JSON错误,无法将types'__NSArrayM'(0x507b58)的值转换为'NSDictionary'(0x507d74)

我试图从一个url(JSON文件)的数据我在这些行上得到这个错误:

var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! NSDictionary if (err != nil) { println("JSON Error \(err!.localizedDescription)") } 

错误说

线程6:信号SIGABIRT – 无法将types'__NSArrayM'(0x518b58)的值转换为'NSDictionary'(0x518d74)。

无论JSON文件数据如何,顶层对象都是一个数组。 因为您为options:parameter passing了.MutableContainers ,所以反序列化返回一个可变数组。

你正在强制将其转换为NSDictionary

 as! NSDictionary 

但是你不能这样做,因为它是一个数组,而不是字典。

正确的事情完全取决于我们正在编写的代码。

  • 我们总是在这里反序列化相同的JSON吗? 它会一直有相同的结构吗?

如果我们不是,我们需要一个更有活力的方法。 但是,如果我们是,这个错误清楚地表明你正在反序列化一个数组,所以让我们改变as! NSDictionary as! NSDictionary到:

 as NSMutableArray 

这将做几件事情。

既然我们要抓取可变对象,这会给我们可变的对象(否则我们不应该把它们看作是可变的)。

我们实际上会阅读正确的types(数组和字典)。

并通过删除! ,我们会回来一个可选的。 好消息是,这意味着我们的代码不会因为意外的JSON而崩溃。