嵌套的JSON解析器

时间:2015-10-20 09:18:05

标签: ios json swift alamofire

我是Swift和iOS开发的新手,无法理解。我尝试用Alamofire解析JSON到UiTableView。但JSON的响应包含另一个JSON请求的嵌套URL。除此之外,我使用了MBProgressHUD用于"请等待"视图。 当我处理所有JSON响应时,如何隐藏此进度视图?

我有解析JSON的下一个代码。

  \lo_export oid-to-export /path/to/a/file

但是,当HUD隐藏并且数据显示在视图中时,它解析了嵌套的JSON。怎么解决?

P.S 或者如果没有Alamofire我该怎么做?

1 个答案:

答案 0 :(得分:0)

当第一个json返回时,你会关闭HUD。

要隐藏HUD,当所有JSON都返回时,您只需稍微重新排列代码:

Alamofire.request(.GET, Links.apiUrl)
        .authenticate(user: login, password: password)
        .responseJSON { response in
                    let json = SwiftyJSON.JSON(response.result.value!)
                    for (_, value):(String, SwiftyJSON.JSON) in json {
                        let file: CacheFile! = CacheFile(filename: value["name"].string!, preview: value["preview"].string!, id: value["id"].string!)
                        print (file.filename)
                        dispatch_async(dispatch_get_main_queue(), {
                        self.fileList.append(file)
                        self.tableView.reloadData()
                        })

                        Alamofire.request(.GET, file.layoutURL)
                            .authenticate(user: login, password: password)
                            .responseJSON{ responseLayout in
                                let jsonLayout = SwiftyJSON.JSON(responseLayout.result.value!)
                                let layoutsArray = jsonLayout["layouts"]
                                for (_, layoutObj):(String, SwiftyJSON.JSON) in layoutsArray{
                                    let alias = layoutObj["alias"].string!
                                    let layoutFile: Layout! = Layout(name: layoutObj["name"].string!, alias: Int(alias))
                                    print (layoutFile.name)
                                    file.addLayout(layoutFile)
                                }
                             dispatch_async(dispatch_get_main_queue()) {
                                  self.hideHUD()
                                 self.tableView.reloadData()

                                }
                           }
                      }
    }

基本上,您需要将self.hideHUD调用包装在第二个JSON调用的完成标头中。