我需要在URL中获取JSON

时间:2016-09-13 07:30:55

标签: ios json swift

我读到了有关URL加载系统的信息:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165i

无法弄清楚使用什么类以及如何使用它。

errorSreenshot

2 个答案:

答案 0 :(得分:2)

我建议使用像Alamofire这样的第三方框架。本机Swift网络相当复杂,特别是对于初学者来说,因为Swift是类型安全的语言,而JSON对象可以有嵌套等等,只能在以后看到实际上抓取对象。

好消息是Alamofire可以很容易地与CocoaPods一起安装,并且它正在积极开发中。以下是使用Alamofire 4.0版本的Swift 3从名为yourUrl的URL获取JSON对象的请求示例:

Alamofire.request("https://yourUrl").responseJSON { response in
  print(response.request)  // original URL request
  print(response.response) // HTTP URL response
  print(response.data)     // server data
  print(response.result)   // result of response serialization

  if let json = response.result.value {
    print("JSON: \(json)")
    // do something with json here
  }
}

然后,您可以使用其他第三方框架(如SwiftyJSON)来解析您检索的JSON - 特别是如果它具有复杂的结构。但遗憾的是,Swift 3没有更新,所以我想我们必须等待,看看这是如何实现的。

编辑: SwiftyJSON有一个非官方的Swift 3分支,可以安装cocoapods(它适用于iOS10 / Swift 3):

pod 'SwiftyJSON', git: 'https://github.com/BaiduHiDeviOS/SwiftyJSON.git', branch: 'swift3'

答案 1 :(得分:0)

使用以下功能加载网址。

fun loadURL()->void{
 let defaultSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
    var dataTask: NSURLSessionDataTask?
    let url = NSURL(string: "URL TO LOAD")//Add url string here
    dataTask = defaultSession.dataTaskWithURL(url!) {
        data, response, error in
        dispatch_async(dispatch_get_main_queue()) {
            UIApplication.sharedApplication().networkActivityIndicatorVisible = false
        }
        if let error = error {
            print(error.localizedDescription)
        } else if let httpResponse = response as? NSHTTPURLResponse {
            if httpResponse.statusCode == 200 {
                print(data);
                //Process data here..
            }
        }
    }
    dataTask?.resume()
}

您可以使用NSJSonSerialization类中的build将NSdata转换为NSDictionary,然后解析Dictionary以提取值。您的解析逻辑将被添加//在此处理数据..代替上述代码库中的此注释。