NSJSONSerialization.JSONObjectWithData devuelve cero

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

Devuelve nil sin error:

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

Devuelve nil sin error porque no es el análisis de JSON lo que está fallando. Está fallando debido al tipo de molde condicional del object resultante como dictionary. Que JSON no representa un dictionary: es una matriz con un elemento (que resulta ser un dictionary). El exterior [ y ] indica una matriz. Entonces, cuando analizas esto, quieres NSArray como un NSArray .

Por ejemplo, en Swift 1.2 podrías:

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

O puedes elegirla como una variedad de dictionarys:

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

Llamar a isValidJSONObject: o intentar una conversión son las forms definitivas de saber si un object dado se puede convertir a datos JSON.

isValidJSONObject (_ 🙂 Devuelve un valor boolean que indica si un object determinado se puede convertir a datos JSON.

Declaración SWIFT class func isValidJSONObject (_obj: AnyObject) -> Bool Parámetros obj El object a probar. Valor de retorno verdadero si obj se puede convertir a datos JSON, de lo contrario es falso.

Disponibilidad de discusiones Disponible en iOS 5.0 y versiones posteriores.