仅允许在JSON模式中声明的属性

ipe*_*eer 62 json jsonschema

我正在使用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"
]
}
Run Code Online (Sandbox Code Playgroud)

}

Jul*_*les 84

我相信你需要做的就是设置additionalProperties为false.请参阅此处的规范


and*_*abs 23

在您的定义中提供:

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

演示:

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

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


clo*_*eet 6

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

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

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

var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties);
Run Code Online (Sandbox Code Playgroud)

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