使用Swift 3中的索引值检索json

时间:2017-03-08 15:58:10

标签: json swift

我有一个json文件

"result": {
"28086259": { 
  "uid": "28266107",
  "pubdate": "2017 Jan 13",
  "epubdate": "2017 Jan 13",
  }
"28238810": {
  "uid": "28238810",
  "pubdate": "2017 Feb 23",
  "epubdate": "2017 Feb 23",
  }

我正在尝试使用他们的代码访问每个对象,即28266107.我可以使用以下代码单独访问这些值。 idList包含所有uid的列表。

  let parsedResult = try? JSONSerialization.jsonObject(with: data, options: [])
  as! NSDictionary

      guard let results = parsedResult!["result"] as? [String:AnyObject] else {                   
                print("There was an error at result")
                return 
            }
      guard let id = results["\(self.idList[0])"] as? [String:AnyObject] else {
                print(error.debugDescription as Any)
                print("There was an error at id")
                return 
                    }

但是,如果我尝试创建for循环以将uid解析为results参数,则guard语句将失败。

 for (index, element) in self.idList.enumerated() { 
      guard let id = results["\(element)"] as? [String:AnyObject] else {
                print(error.debugDescription as Any)
                print("Element at index \(element)")
                print("There was an error at id")
                return 
                    }
 }

保护失败时元素的值是28266107,这是列表中的第一个值。

我不明白为什么如果idList数组值设置为0,则循环遍历guard语句会成功,但如果将其设置为索引值则会失败。特别是当索引值完全相同时。

1 个答案:

答案 0 :(得分:0)

您需要遍历结果Array并访问嵌套的Dictionary,而不是遍历Dictionary

if let parsedResult = (try? JSONSerialization.jsonObject(with: data, options: [])) a? [String:Any],
   let resultDic = parsedResult["result"] as? [String:[String:Any]] {

     for (key, value) in resultDic { 
         print(key) //If you want to access key also
         print(value["uid"])
         print(value["pubdate"])
         print(value["epubdate"])
     }
} 

注意:如果嵌套字典中的所有值都是resultDic类型,您还可以将[String:[String:String]]类型更改为String