[英]How to Parse JSON in Swift 3 using Alamofire?
我正在使用Swift3。到目前为止,我实际上还没有使用过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
看到的那样,每个新块都被声明为没有任何标识符,那么如何调用该特定块?
关键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()
}
请注意,字典始终是无序的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.