首页 > 解决方案 > (Swift)如何解析有时包含某个字段的 JSON 响应?

问题描述

我正在尝试解析有时包含字段“状态”而有时不包含的 JSON 响应。例如:

{
country: "US", 
lat: 69, 
lon: 69, 
name: "CityName",
state: "StateName"
}

对比

{
country: "US", 
lat: 69, 
lon: 69, 
name: "CityName"
}

我正在使用 Alamofire 来解析它,但是当 json 响应不包含“状态”字段时,当然会遇到错误。

      AF.request("API.COM").responseData(completionHandler: { response in
            guard let data = response.data else { return }
            let responses = try! JSONDecoder().decode([apiResponse].self, from: data)
            print(responses as Any)
            self.dispatchGroup.leave()
        })

在哪里:

struct apiResponse: Decodable {
    var country: String
    var lat: Float
    var lon: Float
    var name: String
    var state: String
}

我想为响应中的每个对象获取一个结构,无论它是否包含“状态”字段。做这个的最好方式是什么?我尝试在解析对象时使用一些 do/catch 逻辑来捕获错误,然后尝试使用没有状态字段的可解码结构来解析它,但这对我来说不起作用。非常感谢您的任何帮助。

标签: jsonswiftalamofire

解决方案


改变

struct apiResponse: Decodable {
    var country: String
    var lat: Float
    var lon: Float
    var name: String
    var state: String
}

作为

struct apiResponse: Decodable {
    var country: String
    var lat: Float
    var lon: Float
    var name: String
    var state: String?
}

你可以检查状态为

if let _ = model.state {
}

推荐阅读