这是密码。
func callFire(url:String) {
Alamofire.request(url).responseJSON(completionHandler: {response in
self.parseData(JSONData: response.data!)
})
}
func parseData(JSONData: Data) {
do {
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStandard
if let tracks = readableJSON["tracks"] as? JSONStandard {
if let items = tracks["items"]{
for i in 0..<items.count {
let item = items[i] as! JSONStandard
let name = item["name"] as! String
trackNames.append(name)
self.tableView.reloadData()
}
}
}
}
catch {
print(error)
}
}这就是我得到一个错误“含糊使用‘下标’”的地方
让item = itemsi作为!JSONStandard
发布于 2016-09-18 17:03:20
你为什么要使用JSONStandard?只需将该节点转换为Map或Array即可。如果这是一张地图,你可以这样做:
if let tracks = readableJSON["tracks"] as? [String: Any]然后你就可以按名字把东西拔出来,例如:
let name = tracks["name"] as? String顺便说一句,这是本指南苹果公司最近发布的关于处理JSON的文章。
发布于 2016-09-18 17:35:55
下面是您的parseData(JSONData: Data)应该是什么样的样子
var trackNames = [String]()
func parseData(JSONData: Data) {
do {
if let readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .allowFragments) as? [String: Any],
let tracks = readableJSON["tracks"] as? [String: Any],
let items = tracks["items"] as? [[String: Any]] {
trackNames.append(contentsOf: items.map{$0["name"] as! String})
self.tableView.reloadData()
}
} catch {
print(error)
}
}有效的JSON总是包含[String:Any]字段,其中Any可以再次表示嵌套字典的[String:Any]。下面是一个测试:
let json = "{\"tracks\":{\"items\":[{\"name\":\"a\"},{\"name\":\"b\"},{\"name\":\"c\"}]}}";
var trackNames = [String]()
func parseData(JSONData: Data) {
do {
if let readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .allowFragments) as? [String: Any],
let tracks = readableJSON["tracks"] as? [String: Any],
let items = tracks["items"] as? [[String: Any]] {
trackNames.append(contentsOf: items.map{$0["name"] as! String})
print(trackNames) // prints ["a", "b", "c"]
//self.tableView.reloadData()
}
} catch {
print(error)
}
}
parseData(JSONData: json.data(using: .utf8)!)https://stackoverflow.com/questions/39560316
复制相似问题