限制 json 架构中的属性
Restrict properties in json schema
是否有更好的解决方案来限制 属性 名称然后跟随?
{
"type": "object",
"not": {
"anyOf": [{
"required": ["a"]
}, {
"required": ["b"]
}]
}
}
我愿意接受除 a
或 b
之外的任何属性。关于工作的解决方案,但它非常复杂,我的 python 验证器中的验证错误消息很奇怪。
您的解决方案很好,可读性强。我可以看到它是如何产生奇怪的验证错误的(not
总是使这些错误变得复杂),但我会说模式本身很好地解释了约束。
您可以使用 oneOf
(例如 {"oneOf": [{}, {"required": ["a"]}]}
)将其缩短几个字节,但我认为它不可读。
你也可以用 patternProperties
做一些可怕的事情(即制作一个匹配除 "a"
/"b"
之外的任何东西的正则表达式,然后使用 additionalProperties
),但我还是认为这不太可读。
我觉得你的解决方案很好。
如果您对如何使用 patternProperties 执行此操作感兴趣,可以这样做:
{
"type": "object",
"patternProperties": {
"[aA]": {
"not": {}
},
"[bB]": {
"not": {}
}
}
我需要一个类似的解决方案来支持拒绝不区分大小写的 属性 名称。从草案 4 开始,我使用的实现不支持忽略大小写的正则表达式模式“/i”。
是否有更好的解决方案来限制 属性 名称然后跟随?
{
"type": "object",
"not": {
"anyOf": [{
"required": ["a"]
}, {
"required": ["b"]
}]
}
}
我愿意接受除 a
或 b
之外的任何属性。关于工作的解决方案,但它非常复杂,我的 python 验证器中的验证错误消息很奇怪。
您的解决方案很好,可读性强。我可以看到它是如何产生奇怪的验证错误的(not
总是使这些错误变得复杂),但我会说模式本身很好地解释了约束。
您可以使用 oneOf
(例如 {"oneOf": [{}, {"required": ["a"]}]}
)将其缩短几个字节,但我认为它不可读。
你也可以用 patternProperties
做一些可怕的事情(即制作一个匹配除 "a"
/"b"
之外的任何东西的正则表达式,然后使用 additionalProperties
),但我还是认为这不太可读。
我觉得你的解决方案很好。
如果您对如何使用 patternProperties 执行此操作感兴趣,可以这样做:
{
"type": "object",
"patternProperties": {
"[aA]": {
"not": {}
},
"[bB]": {
"not": {}
}
}
我需要一个类似的解决方案来支持拒绝不区分大小写的 属性 名称。从草案 4 开始,我使用的实现不支持忽略大小写的正则表达式模式“/i”。