快速处理两个不同的http json响应

Posted

技术标签:

【中文标题】快速处理两个不同的http json响应【英文标题】:handle two diffrent http json response swift 【发布时间】:2020-02-15 09:34:06 【问题描述】:

我有一个 API 可以给我两种不同的响应。

这是数据正确且我有对象的时候:

 "latlng": [My Objects] 

这是我的数据为空的时候:

[]

所以我的问题是当我使用 jsonDecoder 时如何处理这个空响应?

我的网络功能:

 func performNetworkingTaskWithParams<T: Codable>(endpoint: EndPointType, type: T.Type, params: [String : String],completion: ((_ response: T)-> Void)?) 
    let url = endpoint.baseURL.appendingPathComponent(endpoint.path)

    let config = URLSessionConfiguration.default
    config.httpAdditionalHeaders = [
        "Accept" : "application/json",
        "Content-Type" : "application/x-www-form-urlencoded"
    ]

    var urlRequest = URLRequest(url: url)

    let session = URLSession(configuration: config)

    urlRequest.encodeParameters(parameters: params)

    let taskSession = session.dataTask(with: urlRequest)  (data, response, error) in
        if let myError = error 
            print("request error:\(myError)")
            return
        

        guard let responseData = data else 
            print("response is null!")
            return
        


        let response = Response(data: responseData)

        guard let decoded = response.decode(type) else 
            print("cannot decode data!")
            return
        
        completion?(decoded)
    

    taskSession.resume()

【问题讨论】:

【参考方案1】:

在您的codable 结构中,您应该实现自定义初始化并将您的数据设置为可选


init(from decoder: Decoder) throws 
     let values = try decoder.container(keyedBy: CodingKeys.self)
     YourField = try? values.decode(TypeOFField.self, forKey: .yourfiled)

【讨论】:

以上是关于快速处理两个不同的http json响应的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 响应中解析两个不同对象的数组

用一个结构解码两个不同的 JSON 响应? [复制]

快速解析动态键的json响应问题

dubbo

Ajax.BeginForm 处理两个不同的 onSuccess 响应,MVC 5,C#

两个应用程序如何响应 Django 中的同一个 URL?