J'ai un json que je pourrais analyser avec SwiftyJSON:
if let title = json["items"][2]["title"].string {
println("title : \(title)")
}
Marche parfaitement.
Mais je ne pouvais pas le parcourir. J'ai essayé deux méthodes, la première est
// TUTO :
//If json is .Dictionary
for (key: String, subJson: JSON) in json {
...
}
// WHAT I DID :
for (key: "title", subJson: json["items"]) in json {
...
}
XCode n'a pas accepté la déclaration de boucle for.
La deuxième méthode:
// TUTO :
if let appArray = json["feed"]["entry"].arrayValue {
...
}
// WHAT I DID :
if let tab = json["items"].arrayValue {
...
}
XCode n'a pas accepté l'instruction if.
Qu'est-ce que je fais mal ?
Si vous voulez parcourir le tableau json["items"]
, essayez:
for (key, subJson) in json["items"] {
if let title = subJson["title"].string {
println(title)
}
}
En ce qui concerne la seconde méthode, .arrayValue
renvoie le tableau non Optional
, vous devez utiliser .array
à la place:
if let items = json["items"].array {
for item in items {
if let title = item["title"].string {
println(title)
}
}
}
Je trouve cela un peu étrange, explique moi-même
for (key: String, subJson: JSON) in json {
//Do something you want
}
donne des erreurs de syntaxe (dans Swift 2.0 au moins)
correct était:
for (key, subJson) in json {
//Do something you want
}
Où en effet key est une chaîne et SubJson est un objet JSON.
Cependant, j'aime le faire un peu différemment, voici un exemple:
//jsonResult from API request,JSON result from Alamofire
if let jsonArray = jsonResult?.array
{
//it is an array, each array contains a dictionary
for item in jsonArray
{
if let jsonDict = item.dictionary //jsonDict : [String : JSON]?
{
//loop through all objects in this jsonDictionary
let postId = jsonDict!["postId"]!.intValue
let text = jsonDict!["text"]!.stringValue
//...etc. ...create post object..etc.
if(post != nil)
{
posts.append(post!)
}
}
}
}
Dans la boucle for, le type de key
ne peut pas être du type "title"
. Puisque "title"
est une chaîne, cherchez: key:String
. Et ensuite, Inside the Loop, vous pouvez utiliser spécifiquement "title"
lorsque vous en avez besoin. Et aussi le type de subJson
doit être JSON
.
Et puisqu'un fichier JSON peut être considéré comme un tableau 2D, le json["items'].arrayValue
renverra plusieurs objets. Il est vivement conseillé d'utiliser: if let title = json["items"][2].arrayValue
.
S'il vous plaît vérifier le README
//If json is .Dictionary
for (key: String, subJson: JSON) in json {
//Do something you want
}
//If json is .Array
//The `index` is 0..<json.count's string value
for (index: String, subJson: JSON) in json {
//Do something you want
}
vous pouvez parcourir le JSON en:
for (_,subJson):(String, JSON) in json {
var title = subJson["items"]["2"]["title"].stringValue
print(title)
}
consultez la documentation de SwiftyJSON . https://github.com/SwiftyJSON/SwiftyJSON parcourez la section Boucle de la documentation.