为什么JSONSchema允许同时使用不同类型的约束

时间:2016-08-03 23:02:12

标签: jsonschema

假设我想将JSON对象限制为整数> 42或这样的整数数组。

有效的draft-04架构

{
    "minimum" : 42,
    "items" : { "type":"integer", "minimum" : 42 }
}

验证42[52, 62]以及"hello"。所以构建模式的方法是错误的。

除了正确的架构包含多余的"类型"字段,因为" items"暗示数组类型:

{
    "oneOf": [
       { 
          "type": "integer", 
          "minimum" : 42 
       },
       {  
          "type": "array", 
          "items" : { "type":"integer", "minimum" : 42 }
       }
     ]

}

问题

同时允许不同类型约束的原因是什么?

这是一个糟糕的设计还是我只是错过了什么?

1 个答案:

答案 0 :(得分:1)

https://github.com/json-schema/json-schema/issues/172

此链接的讨论应该有助于您了解它的工作方式。简短版本是JSON Schema设计简单,一致且灵活。这些特性允许在模式中具有更强的表现力,但它也允许您编写您可能不应该创建的模式。在链接讨论结束时,我举一些例子说明这种表达方式是如何有用的,如果收紧一些粗糙的边缘,JSON Schema会变得不那么优雅。