数字类型(integer/number)
JSON Schema 中有两种数字类型:integer和number。它们共享相同的验证关键字。
笔记:JSON 没有表示复数的标准方法,因此无法在 JSON Schema 中测试它们。
integer
integer
类型用于整数。JSON 没有针对整数和浮点值的不同类型。因此,有无小数点并不足以区分整数和非整数。例如,1
和1.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 的倍数
范围
数字的范围是使用minimum
和maximum
关键字的组合指定的 (或exclusiveMinimum
和 exclusiveMaximum
用于表示排他范围)。
如果x是要验证的值,则以下必须成立:
- x ≥
minimum
- x >
exclusiveMinimum
- x ≤
maximum
- x \<
exclusiveMaximum
虽然您可以同时指定minimum
和exclusiveMinimum
或同时 指定maximum
和exclusiveMaximum
,但这样做没有意义。
{
"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 中,exclusiveMinimum
和exclusiveMaximum
工作方式不同。它们是布尔值,指示是否 minimum
和maximum
不包括该值。例如:
- 如果
exclusiveMinimum
是false
,x ≥minimum
。 - 如果
exclusiveMinimum
是true
, 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