什么是 JSON Schema?
要弄清 JSON Schema 是什么?首先要知道 JSON 是什么。那 JSON 是什么呢?
呃……如果你连 JSON 都不知道是什么,那就用不上 JSON Schema。好了,话说回来,根据 JSON Schema 官网的定义:
JSON Schema is a vocabulary that allows you to annotate and validate JSON documents.
直译过来就是:JSON Schema 是一个词汇表,它允许你注解和验证 JSON 文档。
说人话就是,JSON Schema 定义的是对一个 JSON 文档的注释及格式说明。因此,通过它就可以理解对应 JSON 文档的含义,以及验证其是否正确。
如果碰巧你用过较 JSON 更老的文档格式 XML,又碰巧了解 XML Schema。那么,理解 JSON Schema 就不在话下了,就功能上来讲两者是大同小异的。
需要注意的是,JSON Schema 规范目前还处于草案阶段,因此,应多关注下其规范草案的进展。
从示例说起
1 |
|
上面是官方文档中的一个 JSON Schema 的示例,很显然,它本身也是一个 JSON 文档。
总体而言,其中的 key 大致分为三大类:
- 模式关键字(Schema Keyword),如
$id
和$schema
- 模式注解(Schema Annotation),如
title
和description
- 验证关键字(Validation Keyword),如
type
、properties
、required
等等
所谓的“模式关键字”,或称“元数据关键字”,描述的通常是跟 JSON Schema 本身有关的配置。
$schema
描述的是本 JSON Schema 所使用的是何版本的规范。$id
顾名思义,是本 JSON Schema 的唯一标识符。通常使用本文档的 URI。
$schema
尽量不要缺省,尤其是要使用 JSON Schema 相关程序库来处理时。因为如果缺省,程序库通常会使用缺省的规范版本,这不一定是你想要的。(本文写作时,最新的规范草案是 2020-12。)$id
不仅是唯一标识符,它还跟一些引用特性相关,这将在后续讲“引用/复用”的专题文章中讨论。
注解则是一些说明性文字,以增强阅读 JSON 数据的人员对数据含义的理解,并不会参与验证。
title
是对对象、属性等的标题式的概要说明,一般较简单明了description
是较title
更为详细的描述
验证关键字,即是定义 JSON 数据格式的关键字,它会参与验证。
type
用于指定数据类型,通常是object
、array
、string
、boolean
、integer
、number
、null
七大基本类型之一。properties
通常是一个object
类型值,用于配置对象的属性required
是一个数组,它列出了当前对象中所有必需的属性名
有了以上知识,基本上已经够我们编写一个 JSON Schema 文档来对 JSON 数据进行最简单的验证了。
参考
json-schema.org:这就是官网
json-schema-org.github.io:官网的源码,居然是开源的