这是我在“状态”键值打开时来自邮递员的 API 响应
{
"data": {
"id": 247,
"status": "open",
}
"code": 1,
"message": "Details fetched successfully."
}
这是当“状态”键值更改为“已完成”时来自同一 API 的 API 响应
{
"data": {
"id": 247,
"status": “completed,
"additional_data": {
"id": 241,
"booking_id": 247,
"checklist_done": "{\"4\":\"Gear Oil\",\"2\":\"Engine Oil Change\"}",
"work_with_price": "{}",
"work_price": "0",
"status": "pending"
},
"code": 1,
"message": "Details fetched successfully."
}
因此,如果您查看上面的响应,则会将新键“additional_data”添加到响应中。当“状态”为“打开”时我面临的问题是什么我能够解码数据但是当“状态”更改为“完成”时我无法解码数据
这里是我试过的 这是我为解码 API 响应而创建的结构
struct ServicingModel: Codable {
var data: DataClass?
var code: Int?
var message: String?
}
struct DataClass: Codable {
var id: Int?
var status: String?
var additionalData: AdditionalData?
enum CodingKeys: String, CodingKey {
case id
case status
case additionalData = "additional_data"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
id = try values.decodeIfPresent(Int.self, forKey: .id)
status = try values.decodeIfPresent(String.self, forKey: .status)
if let additionalDataOpt = try values.decodeIfPresent(AdditionalData.self, forKey: .additionalData) {
additionalData = additionalDataOpt
} else {
additionalData = nil
}
}
}
struct AdditionalData: Codable {
var id, bookingID: Int?
var checklistDone: String?
var workWithPrice: String?
var workPrice: String?
var status: String?
enum CodingKeys: String, CodingKey {
case id
case bookingID = "booking_id"
case checklistDone = "checklist_done"
case workWithPrice = "work_with_price"
case workPrice = "work_price"
case status
}
}
通过使用上面的结构,我能够在状态打开时解码数据,但是当状态更改为完成时我无法解码数据,请指导我如何创建模型以获取额外数据以在添加 additional_data 键时映射 API 响应.
我在过去三天一直被这个问题所困扰,我们将不胜感激。感谢提前
您共享的 JSON 不是有效的 JSON,但如果我回答正确,这应该对您有用。
// MARK: - MyModel
struct MyModel: Codable {
let data: DataClass?
let code: Int?
let message: String?
}
// MARK: - DataClass
struct DataClass: Codable {
let id: Int?
let status: String?
let additionalData: AdditionalData?
enum CodingKeys: String, CodingKey {
case id, status
case additionalData = "additional_data"
}
}
// MARK: - AdditionalData
struct AdditionalData: Codable {
let id, bookingID: Int?
let checklistDone, workWithPrice, workPrice, status: String?
enum CodingKeys: String, CodingKey {
case id
case bookingID = "booking_id"
case checklistDone = "checklist_done"
case workWithPrice = "work_with_price"
case workPrice = "work_price"
case status
}
}