2017-03-08 232 views
0

的索引值檢索JSON我有一個JSON文件與斯威夫特3

"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到結果參數中,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,這是列表中的第一個值。

我不明白爲什麼通過guard語句循環會成功,如果idList數組值設置爲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類型。

+0

現在工作嗎? –

+0

是的,它的工作。你的解決方案實際上允許我隔離阻止我的代碼工作的問題。非常感謝! –