Json Schema,考虑到未指定的属性

时间:2014-09-08 02:33:07

标签: json jsonschema json-schema-validator

是否有任何方法可以将未被架构描述的属性引入标准。例如,这个架构:

{
   "description": "foo and bar", 
   "type": "object", 
    "properties": {
       "foo": {
        "type": "number"
       }, 
       "bar": {
        "type": "string", 
        "enum": [
            "a", 
            "b", 
            "c"
        ]
       }
   }
}

将传递此JSON:

{
   "foo": 12345, 
   "bar": "a",
   "baz": 12312
}

虽然它具有baz属性,但不属于架构。

UPD:截至目前,我正在使用tv4库。

1 个答案:

答案 0 :(得分:2)

选项1:架构中的additionalProperties

如果要明确约束特定properties定义中列出的属性,则可以使用additionalProperties: false。这会将数据限制为仅使用附近properties条目中定义的属性 - 在这种情况下为"foo""bar"

但是,使用additionalProperties会影响架构扩展。如果您(或其他人)稍后扩展此架构(使用allOf / $ref),那么数据仍将受此架构约束 - 因此只允许使用"foo""bar",无论其他地方的定义如何。

选项2:tv4

中的banUnknownProperties标志

如果不需要完全锁定,则可以使用banUnknownProperties flag in tv4 (docs)。基本上,在验证之后,任何未被任何模式计算的属性都会被引发为错误。

它适用于理论上允许在数据格式中使用额外属性(包括将来的变体/扩展名)的情况,但是当您需要额外的属性时,您需要(出于测试/警告目的)提醒没想到他们。