96

I am using json-schema and wanting to only allow properties that are declared in this file to pass validation. For instance if a user passes a "name" property in their json object it will fail this schema because "name" is not listed here as a property.

Is there some function similar to "required" that will only allow the listed properties to pass?

{
"$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"
]
}
4

3 回答 3

131

我相信你需要做些什么来实现这一点被设置additionalProperties为假。在此处查看规范

于 2013-07-08T16:13:41.340 回答
7

在您的定义中提供:

  • 里面的所有必填字段"required": []
  • 并设置"additionalProperties": false

演示:

没有"additionalProperties": false在此处输入图像描述

"additionalProperties": false在此处输入图像描述

于 2020-05-29T08:46:33.283 回答
6

仅供参考 - 看起来标准的 v5 将描述“禁止未知属性”验证模式。

因此,不要将此要求作为格式的一部分(正如 Chris Pitman 在评论中所说,这会损害未来的可扩展性),您可以简单地指示您的验证器将未知属性标记为错误。所以,它就像一个对开发人员有用的超严格验证模式。

一些验证器已经支持这一点(例如tv4):

var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties);

使用此工具,checkRecursive如果您的数据可能具有循环引用,则应使用此工具,并且banUnknownProperties完全按照您的意愿行事,而无需使用"additionalProperties":false.

于 2013-10-24T11:41:54.823 回答