json - (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 逻辑来捕获错误,然后尝试使用没有状态字段的可解码结构来解析它,但这对我来说不起作用。非常感谢您的任何帮助。
解决方案
改变
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 {
}
推荐阅读
- vue.js - 如何访问 v-for 中的元素
- machine-learning - 为什么我们需要机器学习的标准化和规范化?
- r - 聚类 x 轴条形图
- javascript - 使用 Jquery 调用下一个 td
- java - 在 PathVariable 中获取空值
- javascript - 如何使 emscripten 生成更好的代码
- elasticsearch - 将多个 Elastic Beats 扩展到集中式 Logstash 的最佳实践是什么
- javascript - Javascript解构:通过引用复制类变量以允许分配和修改值
- javascript - Nest 无法解析 USERRepository 的依赖项
- android - Android库:当“实施项目”用于库的模块依赖时,找不到类文件