Swift json 解析错误:无法将 NSCFConstantString 类型的值转换为 NSArray

Posted

技术标签:

【中文标题】Swift json 解析错误:无法将 NSCFConstantString 类型的值转换为 NSArray【英文标题】:Swift json parsing error: Could not cast value of type NSCFConstantString to NSArray 【发布时间】:2015-04-23 10:59:47 【问题描述】:

我在使用 swift 代码解析 json 时遇到了一些问题。

json 示例

"responce": "ok","orders": ["id":"1"), "id":"2", "id":"3" ]

这段代码运行良好

let dataArray: NSArray = jsonResult["orders"] as! NSArray

但如果我得到"responce": "ok","orders": "" 我得到error: Could not cast value of type __NSCFConstantString (0x10c7bfc78) to NSArray (0x10c7c0470).

我能否以某种方式检查值是否为数组以不崩溃?

【问题讨论】:

你在使用 SwiftyJSON 吗? 我认为是的,如果 NSJSONSerialization 是 SwiftyJSON 的一部分 【参考方案1】:

是的,您可以通过以下方式检查该值是否为 NSArray:

if let dataArray = jsonResult["orders"] as? NSArray 


如果jsonResult["orders"] 的结果是一个 NSArray,那么 dataArray 将被设置,你将进入 if 语句。

【讨论】:

我怀疑您可以通过将其更改为if let dataArray = jsonResult["orders"] as? Array<String> 将其直接转换为Swift Array(前提是它只会存储Strings 否则Array<AnyObject> +1,但我认为您的意思是 if let orders = jsonResult["orders"] as? [[String: String]] ... 或类似的东西。这是一个字典数组,而不是字符串数组。【参考方案2】:

此错误很可能是由于您从我假设的服务器返回的响应不是 JSON,而是类似于 html/XML 响应,表示无法访问服务器,或者您的查询/post 请求无效(因此该值是“NSCFConstantString”)。

使用 James 的答案是检查该值是否为数组的一种非常好的方法,但您可能希望使用 Postman 之类的程序测试您的请求,以查看他的响应是什么,然后硬编码一种方法来处理它用户端的错误。

【讨论】:

你是对的,他应该确保响应是否是有效的 JSON,但是当一个人进行 JSON 解析时会这样做,而不是在这里,他从 a 中获取 "orders" 值之前解析的 JSON 对象。

以上是关于Swift json 解析错误:无法将 NSCFConstantString 类型的值转换为 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

无法将 JSON 数据解析为 Swift

无法在swift 3中解析Json?

如何正确解析 SWIFT 中的 JSON 对象

尝试从 Swift 2.0 中的 json 解析数据时出错?

Swift JSON 解析错误?

Json 解析 Swift 3 Alamofire