2017-07-17 62 views
-1

在这我需要从儿童数组将获得在下面提到的网址的元素,我需要从所有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() 
    } 

回答

0

试试这样:

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() 
     } 
+0

其工作,但只得到了11个对象的孩子数组但我需要让所有的儿童数组 –

+0

已经更新了我的答案,是的,因为你已经遍历数组的循环,所以你必须追加每一个数据,否则它只会显示你最后的数据。当你在swift中编码时,请检查我的更新回答 –

+0

,不要使用NSDictionary和NSArray等所有客观的c语法语法。使用纯粹的快速语法。 只是我的建议 –

0

迭代detailsArray和关键的 “孩子” 将数据追加到childrenArray

 for item in self.detailsArray { 
      if let detailDict = item as? [String: Any] { 
       if let child = detailDict["children"] { 
        self. childrenArray.append(child) 
       } 
      } 
     }