ios - parse - ¿Cómo puedo analizar una matriz dentro de JSON analizado en Swift?
read json swift 4 (4)
Estoy usando una API que devuelve JSON que se ve así
{
"boards":[
{
"attribute":"value1"
},
{
"attribute":"value2"
},
{
"attribute":"value3",
},
{
"attribute":"value4",
},
{
"attribute":"value5",
},
{
"attribute":"value6",
}
]
}
En Swift, uso dos funciones para obtener y luego analizar JSON
func getJSON(urlToRequest: String) -> NSData{
return NSData(contentsOfURL: NSURL(string: urlToRequest))
}
func parseJSON(inputData: NSData) -> NSDictionary{
var error: NSError?
var boardsDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
return boardsDictionary
}
y luego lo llamo usando
var parsedJSON = parseJSON(getJSON("link-to-API"))
El JSON está bien analizado. Cuando me imprima
println(parsedJSON["boards"])
Obtengo todos los contenidos de la matriz. Sin embargo, no puedo acceder a cada índice individual. Estoy seguro de que es un Array, porque entre lo que hago
parsedJSON["boards"].count
Se devuelve la longitud correcta. Sin embargo, si intento acceder a los índices individuales utilizando
parsedJSON["boards"][0]
XCode desactiva el resaltado de sintaxis y me da esto:
y el código no compilará.
¿Es esto un error con XCode 6, o estoy haciendo algo mal?
Eche un vistazo aquí: https://github.com/lingoer/SwiftyJSON
let json = JSONValue(dataFromNetworking)
if let userName = json[0]["user"]["name"].string{
//Now you got your value
}
El acceso al diccionario en Swift devuelve un Opcional, por lo que necesita forzar el valor (o usar la sintaxis if let
) para usarlo.
Esto funciona: parsedJSON["boards"]![0]
(Probablemente no debería bloquear Xcode, sin embargo)
La forma correcta de lidiar con esto sería verificar el retorno de la clave del diccionario:
if let element = parsedJSON["boards"] {
println(element[0])
}
Puedes crear una variable
var myBoard: NSArray = parsedJSON["boards"] as! NSArray
y luego puedes acceder a lo que tengas en "tableros" como-
println(myBoard[0])