Swift:解析 JSON,NSDictionary 的 NSDictionary

Posted

技术标签:

【中文标题】Swift:解析 JSON,NSDictionary 的 NSDictionary【英文标题】:Swift: Parsing JSON, NSDictionary of NSDictionaries 【发布时间】:2015-02-26 08:46:43 【问题描述】:

我正在尝试解析带有一些标签和子标签的JSON 文件。我通过创建NSDictionary 来做到这一点。由此我从某个标签创建了一个NSDictionary。这个NSDictionary 包含我要解析的属性。所以我试图遍历NSDictionary,但它不起作用。我尝试了很多变体,但它一直给我编译时错误。

var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(JSONData, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

var devices:NSDictionary = jsonResult.objectForKey("devices") as NSDictionary

for device:NSDictionary in devices

    device.objectForKey("id")
    //etc
    //etc

我收到以下错误:

'(key: AnyObject, value: AnyObject)' is not convertible to 'NSDictionary'

在每个循环行上。之后我也尝试将其强制转换为 NSDictionary,但后来我得到了同样的错误。

为了澄清,这是我的 json 文件的示例:

  
   "global":  
      //etc
   ,
   "user":  
    //etc
   ,
   "devices":[  
        
         "id":16108,
         //etc
      ,
      
          “id”:12310,
          //etc
      ,
        //etc
,

等显然意味着有更多的数据,这只是一个基本的轮廓。我正在尝试读取设备的属性

【问题讨论】:

【参考方案1】:

这里的问题是objectForKey("devices") 返回一个NSArray 而不是NSDictionary

【讨论】:

它在 Objective-C 中确实有效,有什么方法可以返回 NSDictionary 而不是 NSArray? 根据您提供的 JSON 示例,这不可能返回 NSDictionary。 那么我如何实际读取各个属性? Array 中的项目不能转换为 Arrays。 NSArray(设备)包含 NSDictionary 类型的对象 啊,我明白了!非常感谢!【参考方案2】:

为我工作:

        var error: NSError?
        var jsonResult = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary

        var devices = jsonResult.objectForKey("devices") as NSArray?
        if devices != nil 
            for device in devices! 
                var deviceId = device.objectForKey("id") as NSNumber
                println("deviceId: \(deviceId)")
            
        

【讨论】:

以上是关于Swift:解析 JSON,NSDictionary 的 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章

Swift:解析 JSON 文件

JSON 解析 Swift 4

无法将 JSON 数据解析为 Swift

在 swift 2 中解析 json 对象

Swift 3 解析 JSON 嵌套问题

用 Swift 解析 JSON