参考
基础
在 什么是模式? 中,我们描述了什么是 模式,并希望证明了对模式语言的需要。在这里,我们将继续编写一个简单的 JSON Schema。
你好,世界!
在学习任何新语言时,从最简单的事情开始通常很有帮助。在 JSON Schema 中,一个空对象是一个完全有效的模式,它将接受任何有效的 JSON。
schema
{}
只要是有效的 JSON,它就会接受任何东西
数据
42
符合模式
数据
"我是一个字符串"
符合模式
数据
{ "一个": [ "任意", "嵌套" ], "数据": "结构" }
符合模式
draft 6 中新增
您也可以使用 true
来代替空对象以表示与任何内容匹配的模式,或者使用 false
来表示与任何内容都不匹配的模式。
只要是有效的 JSON,它就会接受任何东西
schema
true
数据
42
符合模式
数据
"我是一个字符串"
符合模式
数据
{ "一个": [ "任意", "嵌套" ], "数据": "结构" }
符合模式
此模式的文档将始终无效
schema
false
数据
"抵抗是徒劳的... 这将始终失败!!!"
不符合模式
type 关键字
当然,如果我们只想接受任何 JSON 文档,我们就不会使用 JSON Schema。JSON Schema 中最常见的事情是限制为特定类型。 type
关键字 用于此目的。
当本书提到 JSON Schema "关键字" 时,指的是对象中键值对的 "键" 部分。编写 JSON Schema 的大部分工作都涉及将特殊的 "关键字" 映射到对象中的一个值。
例如,在下面,只接受字符串
schema
{ "type": "string" }
数据
"我是一个字符串"
符合模式
数据
42
不符合模式
有关 type
关键字的更详细描述,请参见 此处。
声明 JSON Schema
并不总是很容易确定 JSON Schema 使用的是哪个 草案。您可以使用 $schema
关键字声明该 Schema 是根据哪个版本的 JSON Schema 规范编写的。有关详细信息,请参见 $schema。虽然不强制要求,但通常建议使用该关键字。
为了简洁,本书中的大多数示例中都没有包含 $schema
关键字,但在实际应用中应始终使用。
schema
{ "$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema" }
草案特定信息
在草案 4 中,
$schema
的值 https://json-schema.fullstack.org.cn/schema#
指的是最新版本的 JSON Schema。此用法现已弃用,现在需要使用特定版本的 URI。声明唯一标识符
draft 6 中新增
同样最好实践是在每个 Schema 中包含一个 $id
属性作为唯一标识符。目前,将其设置为您控制的域名的 URL,例如
schema
{ "$id": "http://yourdomain.com/schemas/myschema.json" }
当您开始 构建复杂的 Schema 时,$id
的详细信息将变得更加清晰。
草案特定信息
在草案 4 中,
$id
只是 id
(没有美元符号)。