如何使用URLSession从URL获取JSON数据?

时间:2017-12-09 15:29:31

标签: ios json swift nsurlsession

我正在开发一个iOS应用程序,我必须从this url获取数据。

正如我所看到的,这个url包含JSON数据,所以我应该在这里解析或不解析它我不知道如何获取这个JSON数据。

这是我的代码。

import UIKit
import SwiftyJSON

typealias ServiceResponse = (ApiResponseData, NSError?) -> Void

class ApiManager: NSObject {

    var session:URLSession? = nil
    var urlRequest:URLRequest? = nil

    override init(){
        super.init()

        urlRequest = URLRequest(url: URL(string:"https://dl.dropboxusercontent.com/s/2iodh4vg0eortkl/facts.json")!)
        urlRequest?.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
        session = URLSession(configuration: .default)

    }

    func callRestApiToFetchDetails(onCompletion: @escaping ServiceResponse) {
        let task = session?.dataTask(with: urlRequest!, completionHandler: {data, response, error -> Void in
            print("Response = \(data)")

            do {
                let jsonData = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSDictionary
                // Do Stuff
                print("\(jsonData)")
            } catch {
                // handle error
            print("Error in parsing - \(error)")
            }
        })
        task?.resume()
    }
}

但我在解析时遇到错误。

enter image description here

1 个答案:

答案 0 :(得分:1)

您转换为的网络服务响应为tuple 必须转换后LPCWSTR pwszReplace = L"string-of-interest"; std::size_t len = wcslen(pwszReplace); std::wstring path(processPath), std::size_t ndx = path.find(pwszReplace); if(std::wstring::npos!=ndx) { path.replace(ndx, len, L"new-string"); } std::wcout << L"path is now: " << path << std::endl; String.Encoding.ascii String.Encoding.utf8

尝试使用此方法。

NSDictionary