我在 JSON 返回中得到了我以前从未见过的日期格式。
"/Date(965620800000-0400)/"
(是Mon Aug 07 2000 00:00:00 GMT-0400
)
它是以毫秒为单位的日期值,带有 GMT 偏移量。我正在尝试使用 Swift 的原生JSONDecoder
并设置dateDecodingStrategy
.
最初,我尝试了这个:
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .millisecondsSince1970
正如我最初怀疑的那样,由于额外的非数字字符,它不起作用。这是我得到的最初错误:
debugDescription:“预期解码 Double,但找到了一个字符串/数据。”,基础错误:nil))无法读取数据,因为它的格式不正确。
我在Unicode.org 上搜索并找到了这个,它表示A
毫秒,Z
是 ISO8601 基本格式,带有小时、分钟和可选的秒字段。
考虑到这一点,我做了一个DateFormatter
扩展:
extension DateFormatter {
static let nhtsaFormat: DateFormatter = {
let formatter = DateFormatter()
// This is the string that comes back --> "/Date(965620800000-0400)/"
// These are the formats I tried:
formatter.dateFormat = "'/Date('AZ')/'"
// formatter.dateFormat = "'/Date('A')/'"
// formatter.dateFormat = "'/Date('A`-`Z')/'"
// formatter.dateFormat = "'/Date('A'-'Z')/'"
// formatter.locale = Locale(identifier: "en_US_POSIX")
return formatter
}()
}
在我的DataManager
课堂上,我将其更改decoder.dateDecodingStrategy
为我的自定义格式,如下所示:
decoder.dateDecodingStrategy = .formatted(.nhtsaFormat)
对于每种不同的格式,我仍然会收到此错误:
debugDescription:“预期解码 Double,但找到了一个字符串/数据。”,基础错误:nil))无法读取数据,因为它的格式不正确。
我尝试从我的Codable
结构中删除有问题的日期键,我得到了正确的回报,但不幸的是,我也需要日期。非常感谢我如何解码该字符串的任何建议。