【问题标题】:Swift: Parsing JSON, NSDictionary of NSDictionariesSwift:解析 JSON,NSDictionary 的 NSDictionary
【发布时间】: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
},

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

【问题讨论】:

    标签: ios json swift nsdictionary


    【解决方案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)")
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 2023-03-10
      相关资源
      最近更新 更多