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而崩溃。