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的主要内容,如果未能解决你的问题,请参考以下文章