【发布时间】:2019-02-14 11:19:28
【问题描述】:
我正在尝试通过 Alamofire 将 JSON 中的日期转换为 Swift 4 中的结构。我设置了一个与 JSON 格式匹配的日期格式化程序,但出现错误:Date string does not match format expected by formatter
我正在使用以下代码:
struct AgentEvent: Decodable {
let callref: Int?
let repdate: Date?
let parked: Bool?
let company: String?
}
let decoder = JSONDecoder()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
decoder.dateDecodingStrategy = .formatted(dateFormatter)
self.events = try! decoder.decode([AgentEvent].self, from: data!)
使用的示例 JSON(在浏览器中运行方法时确认)是:
{"callref":142,
"company":"Test Company Ltd",
"repdate":"2019-01-25T17:21:00",...
我已经对代码设置了断点,以准确查看我要解码的数据(以防它在某处被翻译),并且正在传入日期格式,它是: “2019-01-25T17:21:00”据我所知,格式确实与格式化程序中的预期格式匹配。我看不出这里有什么问题?
【问题讨论】:
-
请显示完整的实际 JSON。
-
不确定这将有什么帮助,因为它正在更新失败,但是:[{"callref":142,"company":"Test Company Ltd","repdate":"2019-01 -25T17:21:00","attended":"2019-01-25T17:21:00","calltype":15,"status":1,"summary":"测试另一个新事件,以获取组织价值" ,"finflag":null,"parked":false,"Prioritized":false,"Agent_Id":2,"AgentGroup_Id":null,"IsRecurring":0},
-
我从字面上复制然后将您的代码和 JSON 粘贴到 Playground 中,它会正确解析日期,并在控制台上将其打印为
Optional(2019-01-25 17:21:00 +0000) -
将所有属性声明为可选项的目的是什么?您应该只从您的 json 中声明可能没有返回任何值的属性。
-
因为这条记录代表了一个事件的生命周期,所以大多数值可能在某一点或另一个点为空。
标签: json swift4 alamofire decode