J'utilise une API qui retourne JSON qui ressemble à ceci
{
"boards":[
{
"attribute":"value1"
},
{
"attribute":"value2"
},
{
"attribute":"value3",
},
{
"attribute":"value4",
},
{
"attribute":"value5",
},
{
"attribute":"value6",
}
]
}
Dans Swift j'utilise deux fonctions pour obtenir puis analyser le 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
}
puis je l'appelle en utilisant
var parsedJSON = parseJSON(getJSON("link-to-API"))
Le JSON est bien analysé. Quand j'imprime
println(parsedJSON["boards"])
J'obtiens tout le contenu du tableau. Cependant, je ne peux pas accéder à chaque index individuel. Je suis sûr qu'il IS un tableau, parce que je fais
parsedJSON["boards"].count
la longueur correcte est retournée. Cependant, si j'essaie d'accéder aux indices individuels en utilisant
parsedJSON["boards"][0]
XCode désactive la coloration syntaxique et me donne ceci:
et le code ne se compilera pas.
Est-ce un bug avec XCode 6, ou est-ce que je fais quelque chose de mal?
Accès au dictionnaire dans Swift renvoie un Facultatif, vous devez donc forcer la valeur (ou utilisez le if let
syntaxe) pour l'utiliser.
Cela marche: parsedJSON["boards"]![0]
(Il ne devrait probablement pas planter Xcode, cependant)
Jetez un œil ici: https://github.com/lingoer/SwiftyJSON
let json = JSONValue(dataFromNetworking)
if let userName = json[0]["user"]["name"].string{
//Now you got your value
}
Vous pouvez créer une variable
var myBoard: NSArray = parsedJSON["boards"] as! NSArray
et puis vous pouvez accéder à tout ce que vous avez dans des "tableaux" comme-
println(myBoard[0])
La bonne façon de gérer cela serait de vérifier le retour de la clé du dictionnaire:
if let element = parsedJSON["boards"] {
println(element[0])
}