How to loop through JSON with SwiftyJSON?
In the for loop, the type of key
can't be of the type "title"
. Since "title"
is a string, go for : key:String
. And then Inside the Loop you can specifically use "title"
when you need it. And also the type ofsubJson
has to be JSON
.
And Since a JSON file can be considered as a 2D array, the json["items'].arrayValue
will return multiple objects. It is highly advisable to use : if let title = json["items"][2].arrayValue
.
Have a look at : https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html
I Find it a bit strange explained myself, because actually using:
for (key: String, subJson: JSON) in json {
//Do something you want
}
gives syntax errors (in Swift 2.0 atleast)
correct was:
for (key, subJson) in json {
//Do something you want
}
Where indeed key is a string and subJson is a JSON object.
However I like to do it a little bit different, here is an example:
//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!)
}
}
}
}
If you want loop through json["items"]
array, try:
for (key, subJson) in json["items"] {
if let title = subJson["title"].string {
println(title)
}
}
As for the second method, .arrayValue
returns non Optional
array, you should use .array
instead:
if let items = json["items"].array {
for item in items {
if let title = item["title"].string {
println(title)
}
}
}