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


79

我正在使用json-schema,并且只想允许在此文件中声明的属性通过验证。例如,如果用户在其json对象中传递“名称”属性,则该模式将失败,因为此处没有将“名称”作为属性列出。

是否有一些类似于“必需”的功能仅允许列出的属性通过?

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

2
即使有办法,这似乎也证明了脚的未来可扩展性。
克里斯·皮特曼

9
在将来的任何时候,我都将这些属性添加到该架构中。
ipengineer

1
@ipengineer-只要是执行扩展的人,它就会起作用(-ish)。这也意味着您更改了某些人可能认为是静态的资源。
cloudfeet

11
没有“ -ish”的意思。如果您的API将来开始接受新的支持,无论您的团队规模如何,向您的架构中添加新属性都不难。如果是这样,则可能是您做错了其他事情。
AJB

Answers:



5

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

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

一些验证器已经支持此功能(例如tv4):

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

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


2

在定义中提供:

  • 内部所有必填字段 "required": []
  • 并设置 "additionalProperties": false

演示:

没有"additionalProperties": false在此处输入图片说明

"additionalProperties": false在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.