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

Posted

技术标签:

【中文标题】以键和值数组的形式快速从 JSON 中检索特定数组?【英文标题】:Retrieve specific Array from JSON in swift in the form of Array of Keys and Values? 【发布时间】:2016-08-11 18:37:49 【问题描述】:

JSON


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

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


Swift 代码

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” 传递,我应该能够以 Array of String 的形式获取所有键和值数组名为 "11/08/22"

更好的解释:

它应该进入 11/08/22,它应该检索“Bill Gates”、“Steve Balmer”作为键和“Microsoft”作为两个单独数组中的值

【问题讨论】:

可以看到,您的 JSON 在键 "11/08/22" 中包含一个字典数组。您希望从哪里得到一个字符串数组? 给定输入"11/08/22",您想要的字符串输出(确切地说)是什么样的? 你试过jsonResult("11/08/22").flatMap() $0.0 as? String 吗? 我想要像“比尔盖茨”“史蒂夫巴尔默”这样的名字数组和像“微软”这样的不同公司数组 @Santosh 不起作用非函数类型'NSDictionary'的调用值 【参考方案1】:

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

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

使用“11/08/22”键为 JSON 字典下标,并将结果转换为字典数组。

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

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)

结果:

[“史蒂夫·巴尔默”,“比尔·盖茨”] [“微软”]

【讨论】:

【参考方案2】:
let keys=jsonResult["11/08/22"]?.allKeys as? [String];                       
let values=jsonResult["11/08/22"]?.allValues as? [String];

就这么简单

【讨论】:

以上是关于以键和值数组的形式快速从 JSON 中检索特定数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jq 中的流选项从 JSON 文件中检索键和值

如何在 Bash 中间接获取关联数组的键和值?

如何将 JSON 属性值转换为键和值数组

json键和值转数组

如何使用键和值创建json对象,其中value是数组

当标题是键和值的混合时,将数据从 json 附加到表