Ios Swift JSON错误,无法转换类型为'__NSArrayM';(0x507b58)至';NSDictionary';(0x507d74)
我试图从url(json文件)获取数据,但在以下几行中出现错误: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)")
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