以数组键和值的形式从swift中的JSON中检索特定的数组?

时间:2016-08-11 18:37:49

标签: ios arrays json swift

JSON

{
   "11/08/22":[
    {
      "Bill Gates":"Microsoft",
      "Steve Balmer":"Microsoft"
    }],

   "13/08/22":[
    {
      "Tim Cook":"Apple",
      "Jony Ive":"Apple"
    }]

}

Swift Code

let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
    do {
        if let jsonDate = data, let jsonResult = try NSJSONSerialization.JSONObjectWithData(jsonDate, options: []) as? NSDictionary {


            print(jsonResult)

            //Get Result into Seperate Arrays
            let keys = jsonResult.flatMap(){ $0.0 as? String }
            let values = jsonResult.flatMap(){ $0.1 as? String }

        }
    } catch let error as NSError {
        print(error)
    }

})
jsonQuery.resume()

要求:

如果我从程序" 11/08/22" 传递,我应该能够以字符串数组的形式获取所有键和值只有名为" 11/08/22" 的数组。

更好的解释:

它应该进入11/08/22,它应该检索"比尔盖茨",#34;史蒂夫巴尔默"作为Keys和" Microsoft"作为两个独立数组中的值

2 个答案:

答案 0 :(得分:0)

对于这个例子,让我们使用一个数组来收集人员和一组收集公司:

var people: [String] = []
var companies: Set<String> = []

使用&#34; 11/08/22&#34;下载JSON词典键并将结果转换为字典数组。

循环遍历此数组并在循环中,将键添加到people数组并将值插入公司集中。

let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
    do {
        if let jsonDate = data, let jsonResult = try NSJSONSerialization.JSONObjectWithData(jsonDate, options: []) as? NSDictionary {

            if let dateContent = jsonResult["11/08/22"] as? [[String:String]] {
                for group in dateContent {
                    people.appendContentsOf(group.keys)
                    group.values.forEach { companies.insert($0) }
                }
            }

        }
    } catch let error as NSError {
        print(error)
    }

})
jsonQuery.resume()

print(people)
print(companies)

结果:

  

[&#34; Steve Balmer&#34;,&#34;比尔盖茨&#34;]
  [&#34;微软&#34;]

答案 1 :(得分:0)

let keys=jsonResult["11/08/22"]?.allKeys as? [String];                       
let values=jsonResult["11/08/22"]?.allValues as? [String];

这很简单