1

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

{
   "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库。

4

1 回答 1

3

选项 1:additionalProperties在架构中

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

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

选项 2:banUnknownPropertiestv4 中的标志

如果不需要那种完全锁定,那么您可以使用banUnknownPropertiestv4 (docs) 中的标志。基本上,在验证之后,任何模式都没有考虑到的任何属性都会被引发为错误。

它是为理论上允许在数据格式中使用额外属性(包括未来的变体/扩展)的情况而设计的,但您希望(出于测试/警告目的)在您不期望出现额外属性时收到警报。

于 2014-09-08T15:22:42.157 回答