我正在使用json-schema并且只想允许在此文件中声明的属性通过验证。例如,如果用户在其json对象中传递“name”属性,则该模式将失败,因为此处未将“name”列为属性。
是否有一些类似于“必需”的功能只允许列出的属性通过?
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Accounting Resource - Add Item",
"type": "object",
"properties": {
"itemNumber": {
"type":"string",
"minimum": 3
},
"title": {
"type":"string",
"minimum": 5
},
"description": {
"type":"string",
"minimum": 5
}
},
"required": [
"itemNumber",
"title",
"description"
]
}
答案 0 :(得分:68)
我相信您需要做的是将additionalProperties
设置为false。请参阅规范here
答案 1 :(得分:3)
仅供参考 - 看起来标准的v5将描述"ban unknown properties"验证模式。
因此,不要将此要求作为格式的一部分(正如Chris Pitman在评论中所述,损害未来的可扩展性),您可以简单地指示验证器将未知属性标记为错误。所以,它就像一个超级严格的验证模式,对开发人员很有用。
有些验证者已经支持此功能(例如tv4):
var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties);
使用此工具,如果您的数据可能包含循环引用,则应使用checkRecursive
,banUnknownProperties
将完全 ,而不必使用{{1} }}
答案 2 :(得分:3)
在您的定义中提供:
"required": []
内的所有必填字段"additionalProperties": false
演示:
答案 3 :(得分:-2)