限制 json 架构中的属性

Restrict properties in json schema

是否有更好的解决方案来限制 属性 名称然后跟随?

{
    "type": "object",
    "not": {
        "anyOf": [{
           "required": ["a"]
        }, {
           "required": ["b"]
        }]
    }
}

我愿意接受除 ab 之外的任何属性。关于工作的解决方案,但它非常复杂,我的 python 验证器中的验证错误消息很奇怪。

您的解决方案很好,可读性强。我可以看到它是如何产生奇怪的验证错误的(not 总是使这些错误变得复杂),但我会说模式本身很好地解释了约束。

您可以使用 oneOf(例如 {"oneOf": [{}, {"required": ["a"]}]})将其缩短几个字节,但我认为它不可读。

你也可以用 patternProperties 做一些可怕的事情(即制作一个匹配除 "a"/"b" 之外的任何东西的正则表达式,然后使用 additionalProperties),但我还是认为这不太可读。

我觉得你的解决方案很好。

如果您对如何使用 patternProperties 执行此操作感兴趣,可以这样做:

{
    "type": "object",
    "patternProperties": {
        "[aA]": {
            "not": {}
        },
        "[bB]": {
            "not": {}
        }
}

我需要一个类似的解决方案来支持拒绝不区分大小写的 属性 名称。从草案 4 开始,我使用的实现不支持忽略大小写的正则表达式模式“/i”。