Reputation: 85
I am working with Swift 3. I haven't actually used JSON until now. I am facing this issue where I can parse data only till query
. No data is being parsed after that. Please help me know what I am doing wrong over here.
JSON Code :
{
"batchcomplete": "",
"continue": {
"gpsoffset": 10,
"continue": "gpsoffset||"
},
"query": {
"pages": {
"445066": {
"pageid": 445066,
"ns": 0,
"title": "RoboCop",
"index": 3,
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/en/thumb/1/16/RoboCop_%281987%29_theatrical_poster.jpg/32px-RoboCop_%281987%29_theatrical_poster.jpg",
"width": 32,
"height": 50
}
},
"25781": {
"pageid": 25781,
"ns": 0,
"title": "Robot",
"index": 1,
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/HONDA_ASIMO.jpg/37px-HONDA_ASIMO.jpg",
"width": 37,
"height": 50
}
},
"2629669": {
"pageid": 2629669,
"ns": 0,
"title": "Robot-assisted surgery",
"index": 8,
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Laproscopic_Surgery_Robot.jpg/34px-Laproscopic_Surgery_Robot.jpg",
"width": 34,
"height": 50
}
},
"1527386": {
"pageid": 1527386,
"ns": 0,
"title": "Robot Chicken",
"index": 9
},
"364093": {
"pageid": 364093,
"ns": 0,
"title": "Robot Wars (TV series)",
"index": 2
},
"3977472": {
"pageid": 3977472,
"ns": 0,
"title": "Robot competition",
"index": 10
},
"26333": {
"pageid": 26333,
"ns": 0,
"title": "Robotech",
"index": 5,
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/en/thumb/9/99/RobotechTitle1985.jpg/50px-RobotechTitle1985.jpg",
"width": 50,
"height": 38
}
},
"20903754": {
"pageid": 20903754,
"ns": 0,
"title": "Robotics",
"index": 4,
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Shadow_Hand_Bulb_large.jpg/33px-Shadow_Hand_Bulb_large.jpg",
"width": 33,
"height": 50
}
},
"893808": {
"pageid": 893808,
"ns": 0,
"title": "Robots (2005 film)",
"index": 7
},
"101673": {
"pageid": 101673,
"ns": 0,
"title": "Robots exclusion standard",
"index": 6
}
}
}
}
Swift Code:
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options:.mutableContainers) as? JSONStandard
print(readableJSON)
if let query = readableJSON?["query"] as? JSONStandard{
print(query," Here!! ")
if let pages = readableJSON?["pages"] as? [JSONStandard]{
print(pages," Check this! ")
for i in 0..<pages.count{
let page = pages[i]
let id = page ["id"] as! String
//titles.append(id)
self.tableView.reloadData()
}
}
}
And as you see in the block pages
each new block is declared without any identifier, so how do I call that particular block?
Upvotes: 0
Views: 385
Reputation: 285069
The value for key pages
is a dictionary, not an array and it derives from query
.
Please read the JSON: []
is array {}
is dictionary.
And there is no key id
, it's pageid
and the value is an Int
(no double quotes).
if let pages = query["pages"] as? JSONStandard {
print(pages," Check this! ")
for (_, page) in pages {
let id = page ["pageid"] as! Int
print(id)
titles.append("\(id)")
}
self.tableView.reloadData() // don't reload the table view in the loop.
}
or – easier – take the key of the dictionary which is also the id
number (here indeed as String
)
if let pages = query["pages"] as? JSONStandard {
print(pages," Check this! ")
for (id, page) in pages {
print(id)
titles.append(id)
}
self.tableView.reloadData()
}
Be aware that a dictionary is always unordered.
Upvotes: 2