1

我的 json 中的日期参数可以为空(“”)。如何在 JSONDecoder 中处理它?

自定义的 dateDecodingStrategy 只能处理不同的格式,但不能处理空值。(格式化程序返回的日期不能是可选的)。

当日期有一个值时,它将完美地工作。但是当日期为“”时,它会崩溃。

decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
        let container = try decoder.singleValueContainer()
        let dateStr = try container.decode(String.self)

        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .iso8601)
        formatter.locale = Locale(identifier: "en_US_POSIX")
        formatter.timeZone = TimeZone(secondsFromGMT: 0)
        formatter.dateFormat = "yyyy"
        if let date = formatter.date(from: dateStr) {
            return date
        }
        formatter.dateFormat = "yyyy-MM-dd"
        if let date = formatter.date(from: dateStr) {
            return date
        }
        throw DateError.invalidDate
    })
4

1 回答 1

0

根据@vadian 的评论,假设您期望用户相关数据的出生日期 (dob) 可能已由某个用户声明,也可能未声明,我所做的是以下

public init(from decoder: Decoder) throws {
    //init other properties...
    do {
        self.dob = try container.decode(Date.self, forKey: .dob)
    } catch {
        self.dob = nil
    }
}

但再次根据@vadian 的评论,如果在 JSON 响应中不返回 dob 会更好。这样你就不需要 do/catch 块了。

于 2019-02-08T10:17:11.980 回答