web-dev-qa-db-fra.com

Comment analyser un tableau à l'intérieur de JSON analysé dans Swift?

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:

XCode Error

et le code ne se compilera pas.

Est-ce un bug avec XCode 6, ou est-ce que je fais quelque chose de mal?

28
Paul Vorobyev

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)

20
micahbf

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
}
9
user3764120

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])
6
Niloy Mahmud

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])
    }
4
voidref