Ios Swift JSON错误,无法转换类型为'__NSArrayM';(0x507b58)至';NSDictionary';(0x507d74)

Ios Swift JSON错误,无法转换类型为'__NSArrayM';(0x507b58)至';NSDictionary';(0x507d74),ios,json,swift,Ios,Json,Swift,我试图从url(json文件)获取数据,但在以下几行中出现错误: var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! NSDictionary if (err != nil) { println("JSON Error \(err!.localizedDescription)")

我试图从url(json文件)获取数据,但在以下几行中出现错误:

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

线程6:信号SIGABIRT-无法将类型为“u NSArrayM”(0x518b58)的值强制转换为“NSDictionary”(0x518d74)


无论JSON文件数据是什么样子,顶级对象都是一个数组。由于您为
选项:
参数传递了
.MutableContainers
,因此反序列化将返回一个可变数组

您正在将此强制强制转换为
NSDictionary

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

正确的做法完全取决于我们编写代码的目的

  • 我们在这里总是反序列化相同的JSON吗?它总是有相同的结构吗
如果我们不这样做,我们需要一个更具活力的方法。但是如果是,这个错误表明您正在反序列化一个数组,所以让我们将
更改为!NSDictionary
至:

as NSMutableArray
这可以做几件事

由于我们正在修改以获取可变对象,这将返回可变对象(否则我们不应将其视为可变对象)

我们将实际读回正确的类型(数组与字典)


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

我应该如何更改它?将
作为一个组件处理掉!NSDictionary
。停止滥用
operator。访问json.org并学习json语法。学习只需要5-10分钟。接下来,抛开您抄袭的任何示例,实际编写与JSON匹配的代码,了解JSON数组(
[]
)映射到NSArray,JSON对象(
{}
)映射到NSDictionary。
as NSMutableArray