从 json 数据值创建字典

Posted

技术标签:

【中文标题】从 json 数据值创建字典【英文标题】:create a dictionary from json data values 【发布时间】:2017-08-21 23:15:24 【问题描述】:

我正在尝试从 2 个 json 值创建一个字典,到目前为止,我可以获得一个并附加到一个数组中,但我想将 2 个值组合为一个字典并将它们添加到一个数组中。这是我的函数目前的样子:

var menuButtonsArray: [String?] = []

func getAppMenuButtons() 
        guard let appJSON = appMenuJSON else return
        guard let items = appJSON["items"] as? [[String: Any]] else 
            return
        

        let filteredItem = items.filter$0["itemId"] as! String == "Items"[0]

            if let data = filteredItem["data"] as? [[String:Any]] 
                for embeddedDict in data 
                    for (key, value) in embeddedDict 
                        if key == "name" 
                            menuButtonsArray.append(value as! String)
                            print("key: \(value)")
                        
                    
                
            

这就是 json 的样子,它被缩短以适应这篇文章:

         "itemId": "Items",
              "data": [
                       
                       "name": "Item1",
                       "url": "www.item1.com"
                       ,
                       
                       "name": "Item2",
                       "url": "www.item2.com"
                       ,
                       
                     "name": "Item2",
                       "url": "www.item2.com"
                       
                       ]

我要做的是创建一个字典数组,格式如下:

名称:网址

类似:

["item1":"www.item1.com","item2":"www.item2.com", "item3":"www.item3.com"]

【问题讨论】:

这只是一个字典,而不是字典数组。 【参考方案1】:

下面是一个例子,告诉你如何使用map()得到你想要的数组:

var data = [["name": "Item1","url": "www.item1.com"],
            ["name": "Item2","url": "www.item2.com"],
            ["name": "Item3","url": "www.item3.com"]]

var newData = data.map  (dict: Dictionary) -> Dictionary<String, String> in
    return [dict["name"]!:dict["url"]!] 

这段代码应该给你

[[“Item1”:“www.item1.com”],[“Item2”:“www.item2.com”],[“Item3”: "www.item3.com"]]

作为输出

【讨论】:

【参考方案2】:

首先,如果您需要Dictionary,然后将您的结果声明为Dictionary 而不是Array,您可以使用订阅将您的embeddedDict["name"] 用作resultDictionary 中的键,并将您的embeddedDict["url"] 用作你的resultDictionary

func getAppMenuButtons() 
        guard let appJSON = appMenuJSON else return
        guard let items = appJSON["items"] as? [[String: Any]] else 
            return
        

        let filteredItem = items.filter$0["itemId"] as! String == "Items"[0]
        var resultDict : [String:String] = [:]
        if let data = filteredItem["data"] as? [[String:Any]] 
            guard embeddedDict["name"] != nil && embeddedDict["url"] else
                continue
            
            for embeddedDict in data 
                resultDict[embeddedDict["name"]] = embeddedDict["url"]
            
        
        debugPrint(resultDict) //in resultDict you will have your desired result
     

【讨论】:

以上是关于从 json 数据值创建字典的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据框字典创建数据框?

在 Python 中从 JSON 数据创建列表和字典 [重复]

将字典插入使用 Python 中的 JSON 创建的 SQL 数据库

Swift - 从字典(或者Alamofire)直接创建Model文件的工具

访问 json 文件列表中的多个字典

如何从大字典中列出的每个类别的所有可能的值组合创建数据框