参考
字符串
string
类型用于文本字符串。它可能包含 Unicode 字符。
unicode
类型长度
可以使用 minLength
和 maxLength
关键字 来限制字符串的长度。对于这两个关键字,值必须是非负数。
正则表达式
关键字 pattern
用于将字符串限制为特定的正则表达式。正则表达式语法是 JavaScript (ECMA 262 特别是) 中定义的语法,并支持 Unicode。请参阅 正则表达式 了解详细信息。
在定义正则表达式时,重要的是要注意,如果表达式在字符串中的任何位置匹配,则该字符串被认为是有效的。例如,正则表达式 "p"
将匹配任何包含 p
的字符串,例如 "apple"
,而不仅仅是 "p"
。因此,除非有充分的理由,否则通常将正则表达式包含在 ^...$
中,例如 "^p$"
,这样通常会更清晰。
以下示例匹配一个简单的北美电话号码,包含可选的区号
格式
关键字 format
允许对某些常用字符串值的类型进行基本的语义识别。例如,由于 JSON 没有 "DateTime" 类型,因此日期需要编码为字符串。 format
允许模式作者指示字符串值应被解释为日期。默认情况下,format
只是一个注释,不会影响验证。
可选地,验证器 实现 可以提供一个配置选项来启用 format
作为断言而不是注释。这意味着如果例如具有 date
格式的值不是可以解析为日期的形式,则验证将失败。这允许值被约束到超出 JSON 模式中的其他工具(包括 正则表达式)所能做到的范围。
实现可能仅针对内置格式的子集提供验证,或对给定格式进行部分验证。例如,一些实现可能认为包含 @
的字符串是电子邮件,而其他实现可能会对格式良好的电子邮件地址的其他方面进行额外的检查。
JSON 模式规范中倾向于使用网络相关的格式,这很可能是由于其在 Web 技术中的起源。但是,只要交换 JSON 文档的各方也交换有关自定义格式类型的的信息,就可以使用自定义格式。JSON 模式验证器将忽略它不理解的任何格式类型。
内置格式
以下是 JSON 模式规范中指定的格式列表。
日期和时间
日期和时间以 RFC 3339,第 5.6 节 的形式表示。这是日期格式的子集,也通常称为 ISO8601 格式。
"date-time"
:日期和时间组合在一起,例如,2018-11-13T20:20:39+00:00
。"time"
:草案 7 中新增时间,例如,20:20:39+00:00
"date"
:草案 7 中新增日期,例如,2018-11-13
。"duration"
:2019-09 草案中新增由 ISO 8601 ABNF for "duration" 定义的持续时间。例如,P3D
表示持续时间为 3 天。
电子邮件地址
"email"
:互联网电子邮件地址,请参阅 RFC 5321,第 4.1.2 节。"idn-email"
:草案 7 中新增互联网电子邮件地址的国际化形式,请参阅 RFC 6531。
主机名
"hostname"
:互联网主机名,请参阅 RFC 1123,第 2.1 节。"idn-hostname"
:草案 7 中新增国际化的互联网主机名,参见 RFC5890,第 2.3.2.3 节。
IP 地址
"ipv4"
: IPv4 地址,根据 RFC 2673,第 3.2 节 中定义的点分十进制 ABNF 语法。"ipv6"
: IPv6 地址,根据 RFC 2373,第 2.2 节 定义。
资源标识符
"uuid"
:2019-09 草案中新增通用唯一标识符 (UUID),根据 RFC 4122 定义。例如:3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a
"uri"
: 通用资源标识符 (URI),根据 RFC3986。"uri-reference"
:草案 6 中的新增内容URI 引用(URI 或相对引用),根据 RFC3986,第 4.1 节。"iri"
:草案 7 中新增"uri" 的国际化等效项,根据 RFC3987。"iri-reference"
:草案 7 中新增"uri-reference" 的国际化等效项,根据 RFC3987
如果模式中的值可以相对于特定的源路径(例如,来自网页的链接),通常最好使用 "uri-reference"
(或 "iri-reference"
)而不是 "uri"
(或 "iri"
)。"uri"
应仅在路径必须为绝对路径时使用。
URI 模板
"uri-template"
:草案 6 中的新增内容根据 RFC6570 的 URI 模板(任何级别)。如果您还不知道什么是 URI 模板,您可能不需要此值。
JSON 指针
"json-pointer"
:草案 6 中的新增内容JSON 指针,根据 RFC6901。在 构建复杂模式 中,对 JSON 模式中使用 JSON 指针进行了更多讨论。请注意,这应仅在整个字符串仅包含 JSON 指针内容时使用,例如/foo/bar
。JSON 指针 URI 片段,例如#/foo/bar/
应使用"uri-reference"
。"relative-json-pointer"
:草案 7 中新增相对 JSON 指针。
正则表达式
请注意,在实践中,JSON 模式验证器仅需要接受 正则表达式 的安全子集,该子集在本文件中其他地方有描述。