是否可以设置仍然允许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 }
答案 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"
}