2015-04-23 65 views
1

我有一些问题与使用SWIFT代码解析JSON。斯威夫特JSON解析错误:无法投类型NSCFConstantString的值的NSArray

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).

我可以采用某种检查,如果值是数组或不不要坠毁?

+0

你在使用SwiftyJSON吗? – skyline75489

+0

我认为是的,如果NSJSONSerialization是SwiftyJSON的一部分 –

回答

3

是您可以检查是否值是通过的NSArray这样做:

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

} 

如果jsonResult["orders"]结果是NSArray中,然后dataArray中的将设置你将进入if语句。

+0

超级,工作,非常感谢你的帮助 –

+0

我怀疑你可以通过将其更改为'if dataArray = jsonResult [“orders”]直接将其转换为Swift数组如?阵列'(只要它只会店'Strings'否则'阵列') –

+0

+1,但我认为你的意思是'如果让订单= jsonResult [“命令”]作为? [[String:String]] {...}'或类似的东西。它是一个字典数组,而不是一串字符串。 – Rob

1

此错误很可能是由你都可以从我的假设是服务器不是JSON,但作为像一个HTML/XML响应说,服务器或者无法达成,或回响应造成的查询/发布请求无效(因此值为“NSCFConstantString”)。

使用James的答案是检查值是一个数组的完美方法,但您可能需要使用Postman这样的程序来测试您的请求以查看他的回应是什么,然后使用硬编码方式来处理用户方面的错误。

+1

你说得对,他应该确保响应是否是有效的JSON,但是当JSON解析不在这里时,他会从先前解析的JSON对象中获取'“orders”值。 – Rob

相关问题