以下是我的代码片段:
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
do {
guard let json = try NSJSONSerialization.JSONObjectWithData
(data!, options: .MutableContainers) as? [NSDictionary] else {
throw HttpError.ParsingFailed
}
completionHandler(success: true, data:json, error: nil)
}
catch HttpError.ParsingFailed {
...
如果响应数据有多个元素,它可以正常工作。 但是,如果响应中只有一个项目,NSJSONSerialization.JSONObjectWithData将失败(进入抛出异常的else块)。 为什么在这种情况下它仍然不解析响应,并返回一个内部有一个元素的数组? 这个问题一般应该如何解决?
当然,使用as在catch块中进行其他解析是有帮助的吗? NSDictionary而不是? [NSDictionary],但我会尽可能避免这种情况。
修改 要解析的对象有效:
[
{
"id": 1,
"idConsumer": 12
},
{
"id": 2,
"idConsumer": 12
}
]
哪个不起作用:
{
"id": 65,
"delivery": {
"id": 29,
"idConsumer": 19
},
"postman": {
"id": 13,
"email": "testpostman"
},
"price": 89
}
答案 0 :(得分:1)
它失败了,因为您正在将JSON转换为[NSDictionary]
。当你获得多个对象时,你会得到一个字典数组,但是当你得到一个单独的对象时,你会得到一个字典。
如果转化为NSDictionary
失败,则应尝试转为[NSDictionary]
。
如果两者都失败,那么你应该抛出错误。