ios – 带有Swift的NSDictionary的JSON字符串

前端之家收集整理的这篇文章主要介绍了ios – 带有Swift的NSDictionary的JSON字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图从服务器中保存的数据创建一个字典,我收到数据,但我不能将数据转换为NSDictionary,我相信它是在一个NSData对象中保存
let JSONDictionary: Dictionary = NSJSONSerialization.JSONObjectWithData(JSONData!,options: nil,error: &error) as NSDictionary

这行代码是给我问题的代码,它会抛出一个BAD_EXEC_INSTRUCTION.

我的问题:如何将JSON转换为NSDictionary?

解决方法

您的代码不会执行任何错误处理.但它可以(并且如果这些数据来自Web服务,将会以多种方式失败).

>您必须确保您的数据对象确实存在
>您必须确保数据对象可以转换为JSON
>您必须确保JSON实际上包含一个Dictionary

您应该使用Swifts条件转换和它的可选绑定功能.
如果让JSONData = JSONData检查JSONData不是nil,则可选绑定.如果无法接收数据,您使用的强制解包(JSONData!)可能会崩溃.

如果让json = NSJSONSerialization.JSONObjectWithData检查数据是否可以转换为JSON对象,则可选绑定.条件演员为? NSDictionary检查JSON对象是否实际上是字典.您目前不使用这些检查,将对象强制转换为NSDictionary.如果对象无效json,或者它不是字典,那么会崩溃.

我会推荐这样的东西:

var error: NSError?
if let JSONData = JSONData { // Check 1
    if let json: AnyObject = NSJSONSerialization.JSONObjectWithData(JSONData,error: &error) { // Check 2
        if let jsonDictionary = json as? NSDictionary { // Check 3
            println("Dictionary received")
        }
        else {
            if let jsonString = NSString(data: JSONData,encoding: NSUTF8StringEncoding) {
                println("JSON String: \n\n \(jsonString)")
            }
            fatalError("JSON does not contain a dictionary \(json)")
        }
    }
    else {
        fatalError("Can't parse JSON \(error)")
    }
}
else {
    fatalError("JSONData is nil")
}

您可以将check 2和3合并为一行,并检查NSJSONSerialization是否可以直接创建NSDictionary:

var error: NSError?
if let JSONData = JSONData { // Check 1.
    if let JSONDictionary = NSJSONSerialization.JSONObjectWithData(JSONData,error: &error) as? NSDictionary { // Check 2. and 3.
        println("Dictionary received")
    }
    else {

        if let jsonString = NSString(data: JSONData,encoding: NSUTF8StringEncoding) {
            println("JSON: \n\n \(jsonString)")
        }
        fatalError("Can't parse JSON \(error)")
    }
}
else {
    fatalError("JSONData is nil")
}

确保在生产代码中使用适当的错误处理替换fatalError

原文链接:https://www.f2er.com/iOS/335306.html

猜你在找的iOS相关文章