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的主要内容,如果未能解决你的问题,请参考以下文章