我的NSJSONSerialization似乎给了我嵌套的NSDictionaries - 如何访问外键中的特定键?

时间:2015-08-04 18:45:48

标签: ios json swift nsdictionary

我希望我能正确地表达我的问题,如果我没有,我道歉。不完全确定发生了什么。

所以我用

解析了JSON
let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(responseData!, options: NSJSONReadingOptions.MutableContainers, error: &errors) as! NSDictionary

产生:

{
"tests" =     (
            {
        age = 50;
        gender = m;
        vehicle = 1;
    },
            {
        age = 73;
        gender = m;
        vehicle = 14;
    },
            {
        age = 50;
        gender = m;
        vehicle = 22;
    },
            {
        age = 50;
        gender = m;
        vehicle = 23;
    }, 

。 。

当我打印时(jsonData [" tests"]我得到的基本上与NSArray相同,除了没有"测试{...}" - 看起来几乎是除此之外。

我想用" vehicle"填充tableView。从每个元素进入,所以我怎样才能得到一个数组或某些东西只用于" vehicle"从每个进入。唯一的关键"我在使用原始NSDictionary打印allKeys时得到的是"测试"并且我不能将jsonData [" tests"]作为NSDictionary来制作新的密钥,例如"年龄,性别......"

tl; dr我怎样才能从NSDictionary" jsonData"到一组看起来像[1,14,22,23]的车辆号码。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

到目前为止,已完成工作,只需将包含单个键/值对的字典解包为值。

但是,您实际上并不需要或想要创建一个与现有数据不同的阵列。只需在表dataSource函数中使用正确的映射。将它保存为字典对象数组。

if let a = jsonData["tests"] as? [[String: AnyObject]] {
   myPersonArray = a
}
else { /* handle error */ }
// later

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  // get the cell, then:
  let vehicleNum = myPersonArray[indexPath.row]["vehicle"] as! Int
  cell.text = "\(vehicleNum)"
  // whatever else, then return the cell
}

答案 1 :(得分:0)

看起来你的json是一个包含字典数组的字典,所以你应该能够将jsonData["tests"]中出现的内容作为一个数组进行转换,然后使用.map()来创建一个数组车辆号码如下:

if let dictArray = jsonData["tests"] as? [[String: AnyObject]] {
  var vehicleArray = dictArray.map({ dict in
            dict["vehicle"]     
  })
  //Do something with vehicle array here
}