限制json模式中的属性

时间:2015-01-15 13:24:10

标签: json jsonschema

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

你也可以用patternProperties做一些可怕的事情(即制作一个匹配除"a" / "b"之外的任何内容的正则表达式,然后使用additionalProperties),但我认为& #39;可读性较差。

我认为你的解决方案很好。

答案 1 :(得分:0)

如果您对如何使用patternProperties感兴趣,可以这样做:

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

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