json 模式中整数和数字的最小值和最大值不同

Different minimum and maximum for integer and number in json schema

假设我有一个架构,其中 属性 可以是整数或数字。有没有办法根据值的类型指定不同的最大值?例如:

{
  "type": ["integer", "number"],
  "max-if-integer": 255,
  "max-if-number": 1.0
}

在文档中找不到任何相关信息。

oneOf 会成为你的朋友!

{
  "oneOf": [
    { "type": "integer", "maximum": 255 },
    { "type": "number", "maximum": 1 }
  ]
}

如果您处于 draft7 或更高版本,if/then/else 可能是表达这一点的最佳方式。如果它更早,您可以使用 oneOf 到达那里,正如 gregsdennis 的回答中所讨论的那样。

{
  "if": {"type": "integer"},
  "then": {
    "minimum": integer-minimum,
    "maximum": integer-maximum
  },
  "else": {
    "type": "number",
    "minimum": float-minimum,
    "maximum": float-maximum
  }
}

但是请注意,根据 json 模式规范,1.01 都被视为整数,并且将使用整数 then,而不是数字 else 喜欢 non-whole-number 浮动。