JSON模式 - 如果对象*不*包含特定属性

时间:2015-05-28 19:14:30

标签: json jsonschema

是否可以设置仍然允许additionalProperties的JSON模式,但如果存在非常特殊的属性名称,则匹配?换句话说,我需要知道它是否可能与required声明完全相反。

架构:

{
    "type": "object",
    "properties": {
        "x": { "type": "integer" }
    },
    "required": [ "x" ],
    "ban": [ "z" ] // possible?
}

匹配度:

{ "x": 123 }

匹配度:

{ "x": 123, "y": 456 }

匹配:

{ "x": 123, "y": 456, "z": 789 }

5 个答案:

答案 0 :(得分:20)

使用not关键字可以实现您想要做的事情。如果not架构验证,则父架构将不会验证。

{
    "type": "object",
    "properties": {
        "x": { "type": "integer" }
    },
    "required": [ "x" ],
    "not": { "required": [ "z" ] }
}

答案 1 :(得分:11)

有一种更简单的方法。定义如果x存在则它不能满足任何模式。通过减少到荒谬,x不能存在:

{
    "properties" : {
        "x" : {
            "not" : {}

        }
    }
}

答案 2 :(得分:4)

我通过"additionalProperties": false禁止其他属性解决了这个问题,但使用patternProperties允许除被禁用的属性名称之外的任何属性名称。

{
    "type": "object",
    "properties": {
        "x": { "type": "integer" }
    },
    "required": [ "x" ],
    "patternProperties": {
        "^(?!^z$).*": {}
    },
    "additionalProperties": false
}

答案 3 :(得分:2)

要指定不存在字段,可以将其类型设为null

{
    "type": "object",
    "properties": {
        "x": { "type": "integer" },
        "z": { "type": "null" }

    },
    "required": [ "x" ]
}

答案 4 :(得分:-1)

您可以为该特定属性输入null:

 z : {
"type": "null"
}