モデルの値を更新しようとしており、JSON 操作のデコードとエンコードを使用しています。データに従ってモデルを作成しました。すべて正常に動作していますが、モデルを再度デコードすると、typeMismatch エラーが発生します。私は試しましたが、成功しませんでした。誰でも私を助けることができますか?
注: 元の JSON データとエンコードされたデータを印刷すると、違いがわかります。In Encoded data
"appointments":
tag is missing どうすればこれを処理して追加できますか。
元の JSON データ:
{
"appointments": [
{
"id": 15473454,
"isProjectManual": false,
"projectType": "i",
"appointmentHour": "05:04",
"projectName": "Farid Farjad",
"warmingType": "b",
"subTitle": "4874345 ",
"projectDistrict": "Çay",
"projectFirmName": "Test Firması",
"controlHour": "",
"date": "2019-12-26T05:04:00",
"backgroundColorLight": "#cfd8dc",
"backgroundColorDark": "#556f7b"
}
],
"isSuccess": true,
"message": "İşlem Başarılı.",
"statusCode": 1
}
モデル:
struct ResponseData: Codable {
let appointments : [Appointment]?
let isSuccess : Bool?
let statusCode : Int?
let message : String?
}
struct Appointment : Codable {
let appointmentHour : String?
let backgroundColorDark : String?
let backgroundColorLight : String?
let controlHour : String?
let date : String?
let id : Int?
let isProjectManual : Bool?
let projectDistrict : String?
let projectFirmName : String?
let projectName : String?
let projectType : String?
let subTitle : String?
let warmingType : String?
}
エンコード:
var Appdata : [Appointment]?
let jsonData = try! JSONEncoder().encode(self.Appdata)
let jsonString = String(data: jsonData, encoding: .utf8)!
print(jsonString)
プリントのエンコード
[
{
"projectName": "Farid Farjad",
"id": 15473454,
"subTitle": "4874345 ",
"appointmentHour": "05:04",
"projectDistrict": "Çay",
"projectFirmName": "Test Firması",
"date": "2019-12-26T05:04:00",
"backgroundColorLight": "#cfd8dc",
"backgroundColorDark": "#556f7b",
"isProjectManual": false,
"controlHour": "",
"projectType": "i",
"warmingType": "b"
}
]
デコードコード
let dec = JSONDecoder()
let resp = try dec.decode(ResponseData.self, from: jsonData)
print(resp)
デコードプリント
typeMismatch(Swift.Dictionary<Swift.String, Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil))