gpt4 book ai didi

ios - 如果响应只有一项,Swift 2.0 NSJSONSerialization 将失败

转载 作者:行者123 更新时间:2023-11-29 01:01:59 25 4
gpt4 key购买 nike

这是我的代码片段:

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 block )。为什么在这种情况下它仍然不解析响应,而是返回一个包含一个元素的数组?这个问题一般应该怎么解决?

当然,在 catch block 中使用 as? 进行其他解析会有所帮助吗? NSDictionary 而不是 as? [NSDictionary],但我会尽可能避免这种情况。

编辑:要解析的有效对象:

[
{
"id": 1,
"idConsumer": 12
},
{
"id": 2,
"idConsumer": 12
}
]

哪个不起作用:

   {
"id": 65,
"delivery": {
"id": 29,
"idConsumer": 19
},
"postman": {
"id": 13,
"email": "testpostman"
},
"price": 89
}

最佳答案

它失败了,因为您正在将 JSON 转换为 [NSDictionary]。当你获取多个对象时,你会得到一个字典数组,但是当你获取单个对象时,你会得到一个字典。

如果转换为 [NSDictionary] 失败,您应该尝试转换为 NSDictionary

如果两者都失败,那么您应该抛出错误。

关于ios - 如果响应只有一项,Swift 2.0 NSJSONSerialization 将失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36901231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com