如何在swift 3中使用json解析子数组?
问题描述:
在这我需要从儿童数组将获得在下面提到的网址的元素,我需要从所有11个对象获得儿童数组任何人都可以帮助我如何实现这个?如何在swift 3中使用json解析子数组?
let url = "http://www.json-generator.com/api/json/get/cwqUAMjKGa?indent=2"
var detailsArray :[[String: AnyObject]] = []
var productName = [String]()
var childrenArray :[[String: AnyObject]] = []
override func viewDidLoad() {
super.viewDidLoad()
downloadJsonWithURL()
// Do any additional setup after loading the view.
}
func downloadJsonWithURL() {
let url = NSURL(string: self.url)
URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in
if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {
self.detailsArray = (jsonObj!.value(forKey: "data") as? [[String: AnyObject]])!
print(self.detailsArray)
for item in self.detailsArray{
if let detailDict = item as? NSDictionary {
if let name = detailDict.value(forKey: "name"){
self.productName.append(name as! String)
}
}
}
OperationQueue.main.addOperation({
print(self.productName)
print(self.childrenArray)
})
}
}).resume()
}
答
试试这样:
func downloadJsonWithURL() {
let url = NSURL(string: self.url)
URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in
if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {
self.detailsArray = (jsonObj!.value(forKey: "data") as? [[String: AnyObject]])!
print(self.detailsArray)
for item in self.detailsArray{
if let detailDict = item as? [String:Any] {
if let name = detailDict["name"] as? String {
self.productName.append(name as! String)
}
if let children = detailDict["children
"] as? [Any] {
self.childrenArray.append(children)
}
}
}
OperationQueue.main.addOperation({
print(self.productName)
print(self.childrenArray)
})
}
}).resume()
}
答
迭代detailsArray和关键的 “孩子” 将数据追加到childrenArray
for item in self.detailsArray {
if let detailDict = item as? [String: Any] {
if let child = detailDict["children"] {
self. childrenArray.append(child)
}
}
}
其工作,但只得到了11个对象的孩子数组但我需要让所有的儿童数组 –
已经更新了我的答案,是的,因为你已经遍历数组的循环,所以你必须追加每一个数据,否则它只会显示你最后的数据。当你在swift中编码时,请检查我的更新回答 –
,不要使用NSDictionary和NSArray等所有客观的c语法语法。使用纯粹的快速语法。 只是我的建议 –