我正在使用Swift 3.直到现在我才真正使用过JSON。我正面临这个问题,我只能在query
之前解析数据。之后没有数据被解析。请帮助我知道我在这里做错了什么。
JSON代码:
{
"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代码:
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()
}
}
}
正如您在块pages
中看到的那样,每个新块都声明没有任何标识符,那么如何调用该特定块?
答案 0 :(得分:2)
键pages
的值是字典,而不是数组,它来自query
。
请阅读JSON:[]
数组{}
是字典。
没有键id
,它是pageid
,值是Int
(没有双引号)。
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.
}
或 - 更容易 - 取词典的键,也是id
号码(此处确实为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()
}
请注意字典总是无序的。