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

Why JSONSchema allows different types constraints simultaneously

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

有效的 draft-04 架构

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

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

除了正确的模式包含冗余 "type" 字段,因为 "items" 暗示数组类型:

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

}

问题

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

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

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

link 上的讨论应该可以帮助您理解它为何如此工作。简短的版本是 JSON Schema 被设计成简单、一致和灵活的。这些特性使模式具有更强的表现力,但它也允许您编写您可能不应该编写的模式。在 linked 讨论的最后,我给出了一些示例,说明这种表现力如何有用,如果收紧一些粗糙的边缘,会使 JSON 模式变得不那么优雅。