NSJSONSerialization.JSONObjectWithData返回nil

时间:2015-06-16 03:01:01

标签: ios swift

[
    {
        "_id": "557f27522afb79ce0112e6ab",
        "endereco": {
            "cep": "asdasd",
            "numero": "asdasd"
        },
        "categories": [],
        "name": "teste",
        "hashtag": "teste"
    }
]

返回nil且没有错误:

var json = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.AllowFragments, error: &erro) as? NSDictionary

2 个答案:

答案 0 :(得分:4)

它返回nil没有错误,因为它不是JSON解析失败的。它失败了,因为结果对象的条件类型转换为字典。 JSON不代表字典:它是一个包含一个项目的数组(恰好是一个字典)。外[]表示数组。因此,当您解析此内容时,您希望将其转换为NSArray

例如,在Swift 1.2中你可以:

if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error) as? NSArray, let dictionary = json.firstObject as? NSDictionary {
    println(dictionary)
} else {
    println(error)
}

或者您可以将其转换为字典数组:

if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error) as? [[String: AnyObject]], let dictionary = json.first {
    println(dictionary)
} else {
    println(error)
}

答案 1 :(得分:0)

调用isValidJSONObject:或尝试转换是判断给定对象是否可以转换为JSON数据的明确方法。

isValidJSONObject(_ :) 返回一个布尔值,指示是否可以将给定对象转换为JSON数据。

宣言 迅速 class func isValidJSONObject(_ obj:AnyObject) - >布尔 参数 OBJ 要测试的对象。 回报价值 如果obj可以转换为JSON数据,则为true,否则为false。

讨论 可用性 适用于iOS 5.0及更高版本。