比如我经常看到这样的事情
"Length": 0,
"TestDate": {
"$date": "2023-09-20T05:00:00.0000000Z"
},
"Weight": 0,
"Height": 0,
这有效,
struct DollarDate: Codable {
let date: Date
private enum CodingKeys: String, CodingKey {
case date = "$date"
}
}
然而,现在有了 Swift,通常不需要为编码键而大惊小怪。
例如,如果键是 Swift 关键字,您可以...
struct Draft: Codable {
let id: String
var `case`: Case? // no problem these days, just use backtick
}
对于 json 中的“ $date ”之类的问题键名称是否有类似的即时解决方案?
我猜你的问题是你是否可以做相当于以下的事情:
简短的回答是,不,你不能。
有关标识符的规则,请参阅《Swift 编程语言:词法结构:标识符》 。具体来说,前导
$
在 Swift 中具有独特的用途,并且在声明我们自己的标识符时被明确禁止。正如上述文档所述:CodingKeys
是将 JSON 键映射到 Swift 代码库中语法上有效的内容的正确方法(或者更一般地说,任何时候我们想要将 JSON 键映射到任何标识符,即使只是为了风格一致性)。对于您的查询没有简单的解决方案,但是如果您经常遇到这个“美元”问题,以至于继续编写编码密钥变得很麻烦,您可以使用自定义密钥解码策略。
完成上述内容后,只需分配自定义解码策略即可: