是否有任何方法可以将未被架构描述的属性引入标准。例如,这个架构:
{
"description": "foo and bar",
"type": "object",
"properties": {
"foo": {
"type": "number"
},
"bar": {
"type": "string",
"enum": [
"a",
"b",
"c"
]
}
}
}
将传递此JSON:
{
"foo": 12345,
"bar": "a",
"baz": 12312
}
虽然它具有baz
属性,但不属于架构。
UPD:截至目前,我正在使用tv4库。
答案 0 :(得分:2)
additionalProperties
如果要明确约束特定properties
定义中列出的属性,则可以使用additionalProperties: false
。这会将数据限制为仅使用附近properties
条目中定义的属性 - 在这种情况下为"foo"
和"bar"
。
但是,使用additionalProperties
会影响架构扩展。如果您(或其他人)稍后扩展此架构(使用allOf
/ $ref
),那么数据仍将受此架构约束 - 因此只允许使用"foo"
和"bar"
,无论其他地方的定义如何。
banUnknownProperties
标志
如果不需要完全锁定,则可以使用banUnknownProperties
flag in tv4 (docs)。基本上,在验证之后,任何未被任何模式计算的属性都会被引发为错误。
它适用于理论上允许在数据格式中使用额外属性(包括将来的变体/扩展名)的情况,但是当您需要额外的属性时,您需要(出于测试/警告目的)提醒没想到他们。