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

时间:2013-07-08 15:44:28

标签: 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"
]

}

4 个答案:

答案 0 :(得分:68)

我相信您需要做的是将additionalProperties设置为false。请参阅规范here

答案 1 :(得分:3)

仅供参考 - 看起来标准的v5将描述"ban unknown properties"验证模式。

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

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

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

使用此工具,如果您的数据可能包含循环引用,则应使用checkRecursivebanUnknownProperties将完全 ,而不必使用{{1} }}

答案 2 :(得分:3)

在您的定义中提供:

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

演示:

没有"additionalProperties": falseenter image description here

"additionalProperties": falseenter image description here

答案 3 :(得分:-2)