首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在尝试使用循环获取存储在JSONData中的轨道的名称

我正在尝试使用循环获取存储在JSONData中的轨道的名称
EN

Stack Overflow用户
提问于 2016-09-18 16:59:45
回答 2查看 47关注 0票数 0

这是密码。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2016-09-18 17:03:20

你为什么要使用JSONStandard?只需将该节点转换为Map或Array即可。如果这是一张地图,你可以这样做:

代码语言:javascript
复制
if let tracks = readableJSON["tracks"] as? [String: Any]

然后你就可以按名字把东西拔出来,例如:

代码语言:javascript
复制
let name = tracks["name"] as? String

顺便说一句,这是本指南苹果公司最近发布的关于处理JSON的文章。

票数 0
EN

Stack Overflow用户

发布于 2016-09-18 17:35:55

下面是您的parseData(JSONData: Data)应该是什么样的样子

代码语言:javascript
复制
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]。下面是一个测试:

代码语言:javascript
复制
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)!)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39560316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档