在SWIFT中解析JSON

法比安·布勒格(Fabian Boulegue)

嗨,我尝试找到一种在SWIFT中解析JSON的方法,这对我来说很有用,但我遇到了问题。

我让用户输入用于JSON URL的用户名->如果用户键入有效的用户名,则一切正常。

但是,如果他输入了错误的用户名,我的解析也会失败,但这也是正确的,但是目前我的应用程序只崩溃了,我正在寻找一种解决方法。

这是我的代码崩溃的地方,

 let url0 = NSURL(string: newUrlPath!)
        let session0 = NSURLSession.sharedSession()
        let task0 = session0.dataTaskWithURL(url0!, completionHandler: {data, response, error -> Void in
            if (error != nil) {
                println(error)
            } else {
                let summonorID_JSON = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

Xcode错误

Error Domain = NSURLErrorDomain代码= -1002“操作无法完成。(NSURLErrorDomain错误-1002。)” UserInfo = 0x7c12d610 {NSErrorFailingURLKey = XX,NSErrorFailingURLStringKey = XX,NSUnderlyingError = 0x7c12c8d0“操作无法完成。(( kCFErrorDomainCFNetwork错误-1002。)“}致命错误:在展开可选值时意外发现nil

一切都很好,因为这是我从请求中获得的返回页

https://br.api.pvp.net/api/lol/br/v1.4/summoner/by-name/smirknaitiax?api_key=5c7d4d4f-f320-43d5-8647-643c9f6ee5de

是的,他不能将其解析为NSDirectory,因为它没有返回的JSON(通常是这样),因此有一种方法可以确保如果出现此页面(因此用户输入了错误的用户名),我可以退出我的循环/采取其他方式;)?

gnasher729

您正在使用许多可能全部失败的操作,而Swift对于失败完全是无法原谅的。如果newURLPath为nil,而url0为nil,则代码将崩溃,因为newURLPath不是有效的URL。

因此,您的URL请求可能返回错误(请求本身失败),但是您遇到URL请求成功但给出意外结果(不是JSON字典)的情况。您的代码结尾为“ as NSDictionary”,告诉Swift:“我知道我可能没有字典,但是将得到的内容转换为字典,如果不起作用,则会崩溃”。只需将其更改为

if let parsedJSON = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil)
{
    // Will still crash if the server sends a valid JSON array
    let summonorID_JSON = parsedJSON as NSDictionary
}
else
{
    // data wasn't valid JSON, handle it. 
}

区别在于,将接受JSON解析器返回的可选值,而不会崩溃,并且您检查是否收到了有效的JSON。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章