我试图找出是否有一种方法可以验证特定的JSON实例在架构中声明的字段之外没有其他字段。
让我们以这种模式为例:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Client",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"isActive": {
"type": "boolean"
}
},
"required": []
}
我想强制执行此“类型”的任何JSON只能具有名称,电子邮件和isActive。如果以下JSON验证成功,我希望验证失败:
{
"name": "John",
"email": "john@example.com",
"isActive": true,
"extrafield": 123
}
我正在使用json-schema-validator来执行验证,但是我感觉到,不仅仅是我使用的特定验证器存在实现问题/假设,我的JSON模式并未强制阻止未定义字段。
我该如何实现? 谢谢
答案 0 :(得分:1)
您要寻找的是additionalProperties
。
“ additionalProperties”的值必须是有效的JSON模式。
此关键字确定子实例如何验证对象, 并且不会直接验证即时实例本身。
具有“ additionalProperties”的验证仅适用于子对象
与“属性”中的任何名称都不匹配的实例名称的值, 并且不匹配“ patternProperties”中的任何正则表达式。对于所有此类属性,如果子实例实例验证成功, 根据“ additionalProperties”架构进行验证。
https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.5.6
要翻译:{{1}}中的键值(即模式)将应用于键值实例的对象。
实例对象的所有未经properties
验证(也未经properties
验证)的属性,都由patternProperties
求值。
任何架构的值都可以为additionalProperties
,这会导致验证失败,因此您想向架构中添加false
。
但是请注意,additionalProperties: false
无法“透视”其他应用程序关键字,例如additionalProperties
,并且仅适用于oneOf
和properties
。
(草案8将引入一个新的关键字patternProperties
,以提供此功能,但该版本目前尚未发布)。