跳到主要内容

数字类型(integer/number)

JSON Schema 中有两种数字类型:integernumber。它们共享相同的验证关键字。

笔记:JSON 没有表示复数的标准方法,因此无法在 JSON Schema 中测试它们。

integer

integer类型用于整数。JSON 没有针对整数和浮点值的不同类型。因此,有无小数点并不足以区分整数和非整数。例如,11.0是在 JSON 中表示相同值的两种方式。无论使用哪种表示形式,JSON 模式都将该值视为整数。

在 Python 中,“integer”类似于int类型

在 Ruby 中,“integer”类似于Integer类型

{ "type": "integer" }

42 // OK
\-1 // OK
1.0 // OK,小数部分为零的数字被视为整数
3.1415926 // not OK,浮点数被拒绝
"42" // not OK,作为字符串的数字被拒绝

number

number类型用于任何数字类型,整数或浮点数。

在 Python 中,“数字”类似于float类型。在 Ruby 中,“数字”类似于Float类型。

{ "type": "number" }

42 // OK
\-1 // OK
5.0 // OK,简单的浮点数
2.99792458e8 // OK,指数符号也有效
"42" // not OK,作为字符串的数字被拒绝

倍数

可以使用multipleOf关键字将数字限制为给定数字的倍数 。它可以设置为任何正数。

{
"type": "number",
"multipleOf" : 10
}

0 // OK
10 // OK
20 // OK
23 // not OK,不是 10 的倍数

范围

数字的范围是使用minimummaximum关键字的组合指定的 (或exclusiveMinimumexclusiveMaximum用于表示排他范围)。

如果x是要验证的值,则以下必须成立:

  • xminimum
  • x > exclusiveMinimum
  • xmaximum
  • x \< exclusiveMaximum

虽然您可以同时指定minimumexclusiveMinimum或同时 指定maximumexclusiveMaximum,但这样做没有意义。

{
"type": "number",
"minimum": 0,
"exclusiveMaximum": 100
}

-1 // not OK,小于 0
0 // OK
10 // OK
99 // OK
100 // not OK
101 // not OK

Draft 4

在 JSON Schema draft4 中,exclusiveMinimumexclusiveMaximum工作方式不同。它们是布尔值,指示是否 minimummaximum不包括该值。例如:

  • 如果exclusiveMinimumfalsexminimum
  • 如果exclusiveMinimumtrue, x > minimum

新版本已更改为具有更好的关键字独立性。这是一个使用旧 Draft 4 约定的示例:

{
"type": "number",
"minimum": 0,
"maximum": 100,
"exclusiveMaximum": true
}

-1 // not OK,小于 0
0 // OK
10 // OK
99 // OK
100 // not OK
101 // not OK