无法将“__NSArrayM”类型的值转换为“NSDictionary”

Posted

技术标签:

【中文标题】无法将“__NSArrayM”类型的值转换为“NSDictionary”【英文标题】:Could not cast value of type '__NSArrayM' to 'NSDictionary' 【发布时间】:2015-11-06 18:42:03 【问题描述】:

我有一个 json。我正在尝试用该代码解析它。但它说

do 
    let dataDictionary: NSDictionary = try NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary // <------ Error

    if let customerArray = dataDictionary.valueForKey("cart") as? NSArray 
        for js in customerArray 
            let nameArray = js.valueForKey("name")
            let idArray = js.valueForKey("id")
        
    

感谢您的帮助

【问题讨论】:

看起来您的响应对象包含一个数组,而不是字典。你能显示json吗? 【参考方案1】:

数据中的根对象是一个数组,而不是一个对象(字典)。

您需要根据反序列化的对象动态决定如何处理您的 JSON。

【讨论】:

【参考方案2】:

它告诉您的是,您正在解析的 JSON 对象不是字典,而是一个数组。因此,如果您更改它以将其值视为数组而不是字典,您将能够对其进行迭代。

您需要重新评估您的 JSON 以确保其结构符合您的想法。如果您发布了您尝试解析的 JSON,这也会很有用,以便我们也可以看到它的结构。

【讨论】:

以上是关于无法将“__NSArrayM”类型的值转换为“NSDictionary”的主要内容,如果未能解决你的问题,请参考以下文章

Swift JSON 错误,无法将类型“__NSArrayM”(0x507b58)的值转换为“NSDictionary”(0x507d74)

Swift 2.0:无法将类型“__NSArrayM”(0x10a9348d8)的值转换为“NSDictionary”(0x10a934d60)

[__NSArrayM objectAtIndex:]: 索引 2 超出范围 [0 .. 1]'

在映射集合时快速获取异常“所需类型 = NSOrderedSet;给定类型 = __NSArrayM”

“[__NSArrayM objectForKey:]:无法识别的选择器”尝试从字典中检索字符串时

[__NSArrayM getFileSystemRepresentation:maxLength:]: 无法识别的选择器发送到实例