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