我正在访问带有预先烘焙的JSON输出的CMS,它使用以下数据结构。我正在努力深入到嵌套集合中以获取版本或循环通过类别。
{
results: [
{
pageData: {
info: {
version: "1"
},
categories: [
{
name: "Cat 1"
},
{
name: "Cat 2"
}
]
}
}
]
}
这是我试图使用的代码。任何帮助表示赞赏!
guard let json = json, let results = json["results"], let pageData = results["pageData"], let info = pageData["info"] as? [String:Int], let version = info["version"],
let categories = Category.getCategories(json: json) else {
self.completionParse(RequestResult.errorParsing, self.categoriesResult)
return
}
答案 0 :(得分:3)
要访问info
和categories
词典,您需要先访问位于results
数组的第一个对象内的pageData
数组和results
。< / p>
guard let json = json, let results = json["results"] as? [[String:Any]],
let firstDic = results.first, let pageData = firstDic["pageData"] as? [String:Any],
let info = pageData["info"] as? [String:Int], let version = info["version"],
let categories = Category.getCategories(json: pageData) else {
self.completionParse(RequestResult.errorParsing, self.categoriesResult)
return
}
答案 1 :(得分:1)
在操场上测试下面的代码。这段代码是最新的swift 3。
if let dictResponse = json as? [String:Any] {
// This will get entire dictionary from your JSON.
if let results = dictResponse["results"] as? [[String:Any]]{
if let pageData = results.first? ["pageData"] as? [String:Any]{
if let info = pageData["info"] as? [String:Any]{
if let version = info["version"] as? String{
print(version)
// This will print 1
}
}
if let categories = pageData["categories"] as? [[String:Any]]{
// This will give you a category array. Later on you can iterate and get the dictionary’s value of each element.
for categoriesObj in categories.enumerated(){
if let name = categoriesObj.element["name"]{
print(name)
}
}
}
}
}
}