我有一个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语句会成功,但如果将其设置为索引值则会失败。特别是当索引值完全相同时。
答案 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
。