简体   繁体   English

在swift4中将JSONresponse转换为NSDATA或NSDICTIONARY

[英]convert JSONresponse to NSDATA or NSDICTIONARY in swift4

I get a response from a public test api in swift as a JSONarray: 我从公共测试api迅速得到一个JSONarray的响应:

func getFlightData(airportCode: String, minutesBehind: String, minutesAhead:String){
    let securityToken: String = "Basic YWFnZTQxNDAxMjgwODYyNDk3NWFiYWNhZjlhNjZjMDRlMWY6ODYyYTk0NTFhYjliNGY1M2EwZWJiOWI2ZWQ1ZjYwOGM="
    var headers: HTTPHeaders = [:]
    headers["Authorization"] = securityToken
    let parameters: Parameters = ["city": airportCode, "minutesBehind" : minutesBehind, "miutesAhead" :minutesAhead]
            Alamofire.request("https://api.qa.alaskaair.com/1/airports/"+airportCode+"/flights/flightInfo", parameters: parameters, headers: headers).responseJSON { (response) in
        print(response)

    }

I have used almofire in swift4 to achieve this operation. 我已在swift4中使用almofire来完成此操作。

Should I convert this JSONArray to NSData or NSDictionary? 我应该将此JSONArray转换为NSData还是NSDictionary? and How? 如何? Do I have to use JSONSerealization? 我必须使用JSONSerealization吗?

You are already using Alamofire as your network requester, So it is not necessary to convert the response object to JSON object or Data object. 您已经使用Alamofire作为网络请求者,因此不必将响应对象转换为JSON对象或Data对象。 The library itself will provide to parsed JSON object. 该库本身将提供已解析的JSON对象。 So check the below sample code to check the JSON object. 因此,请检查以下示例代码以检查JSON对象。

    let urlString = "https://......"
    let securityToken: String = "Basic YWFnZTQxNDAxMjgwODYyNDk3NWFiYWNhZjlhNjZjMDRlMWY6ODYyYTk0NTFhYjliNGY1M2EwZWJiOWI2ZWQ1ZjYwOGM="
    var headers: HTTPHeaders = [:]
    headers["Authorization"] = securityToken
    let parameters: Parameters = ["city": 100, "minutesBehind" : 60, "miutesAhead" :0]
    Alamofire.request(urlString, method: .get, parameters: parameters, encoding: JSONEncoding.default, headers: headers).validate().responseJSON { (response) in
        if let jsonObject = response.result.value{
            print("response.result.value \(String(describing: jsonObject))")
        }

        if let jsonObject = response.value{
            print("response.value \(String(describing: jsonObject))")
        }
    }
    let urlPath: String = BASE_URL + uri

    let url = URL(string: urlPath)!
    let request = NSMutableURLRequest(url: url)
    request.addValue("no-cache", forHTTPHeaderField: "Cache-Control")

    Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: [:])
        .responseJSON { response in

            print("S-E-R-V-E-R  C-A-L-L  C-O-M-P-L-E-T-E-D")

            switch response.result {

            case .success:

                if let json = response.result.value {

                    var data = [String: AnyObject]();

                    if let dict = json as? [String: AnyObject]{
                        // Dictionary found
                        data = dict;
                    }
                    else if let list = json as? [AnyObject] {
                        // Array found
                        data = ["data":list as AnyObject];
                    }          
             }

            case .failure(let error):

                print("status code: \(error.localizedDescription)")
                failure(error as NSError);
            }
    }

You can use following to achieve this. 您可以使用以下方法实现此目的。

ObjectMapper 对象映射器

AlamofireObjectMapper AlamofireObjectMapper

Moya-ObjectMapper Moya-ObjectMapper

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM