从 NSDictionary 访问数据

Posted

技术标签:

【中文标题】从 NSDictionary 访问数据【英文标题】:Access data from NSDictionary 【发布时间】:2015-03-04 23:40:12 【问题描述】:

我正在尝试从 Swift 中的 NSDictionary 获取数据,但我无法做到这一点。 这是代码

    let urlPath = "http://ws-report.goocity.it/Stats/json/GetReport"
    let url: NSURL = NSURL(string: urlPath)!
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithURL(url, completionHandler: data, response, error -> Void in
        var result: NSDictionary
        if error != nil 
            // If there is an error in the web request, print it to the console
            println(error.localizedDescription)
        

        var err: NSError?
        var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
        if err != nil 
            // If there is an error parsing JSON, print it to the console
            println("JSON Error \(err!.localizedDescription)")
        
        else
            //var arr : NSArray = jsonResult.valueForKey("Stats") as NSArray
            //var cash: String? = jsonResult.valueForKey("Cash") as? NSString
            let stats = jsonResult["Stats"]! as [[String : AnyObject]]
        
    )
    task.resume()

您可以看到点击 urlPath 的 JSON。 我仍然在let stats = ... 上收到以下错误

线程 5:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)

我刚刚在 *** 和任何地方查看了其他几篇帖子,但没有任何答案适合我的问题。

我需要获取许多变量(如 cash、lastUpdate、totalPartners 等)中的所有 JSON 字段值。

【问题讨论】:

您是否 100% 确定 jsonResults 具有键“Stats”的值?你确定结果是一个包含字典对象的数组吗? 使用!是有风险的 - 它说“这个值绝对是 String:Anyobject 的字典数组。我建议你删除 ! 并在最后添加一个 ?。然后你可以测试 stats 的值是否为 nil 并采取适当的措施跨度> 对于此类问题,您应始终提供 JSON 列表或其代表性示例。 【参考方案1】:

您的 json 不是字典数组,它只是一个字典。

[[String: AnyObject]] 更改为 [String: AnyObject] 即可。

【讨论】:

以上是关于从 NSDictionary 访问数据的主要内容,如果未能解决你的问题,请参考以下文章

访问从 NSJSONSerialization 生成的 NSDictionary 中的 JSON 数据

在数组中访问 NSDictionary

如何使用保留关键字访问 NSDictionary 元素?

尝试从 json 创建的 nsdictionary 访问信息

从 NSDictionary 中删除密钥

我可以从一个键值访问 NSDictionary 中的所有值吗?