0%

JSON Schema笔记:入门篇

什么是 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "https://example.com/product.schema.json",
"title": "Product",
"description": "A product from Acme's catalog",
"type": "object",
"properties": {
"productId": {
"description": "The unique identifier for a product",
"type": "integer"
},
"productName": {
"description": "Name of the product",
"type": "string"
}
},
"required": [ "productId", "productName" ]}

上面是官方文档中的一个 JSON Schema 的示例,很显然,它本身也是一个 JSON 文档。

总体而言,其中的 key 大致分为三大类:

  • 模式关键字(Schema Keyword),如 $id$schema
  • 模式注解(Schema Annotation),如 titledescription
  • 验证关键字(Validation Keyword),如 typepropertiesrequired 等等

所谓的“模式关键字”,或称“元数据关键字”,描述的通常是跟 JSON Schema 本身有关的配置。

  • $schema 描述的是本 JSON Schema 所使用的是何版本的规范。
  • $id 顾名思义,是本 JSON Schema 的唯一标识符。通常使用本文档的 URI。

$schema 尽量不要缺省,尤其是要使用 JSON Schema 相关程序库来处理时。因为如果缺省,程序库通常会使用缺省的规范版本,这不一定是你想要的。(本文写作时,最新的规范草案是 2020-12。)
$id 不仅是唯一标识符,它还跟一些引用特性相关,这将在后续讲“引用/复用”的专题文章中讨论。

注解则是一些说明性文字,以增强阅读 JSON 数据的人员对数据含义的理解,并不会参与验证。

  • title 是对对象、属性等的标题式的概要说明,一般较简单明了
  • description 是较 title 更为详细的描述

验证关键字,即是定义 JSON 数据格式的关键字,它会参与验证。

  • type 用于指定数据类型,通常是 objectarraystringbooleanintegernumbernull 七大基本类型之一。
  • properties 通常是一个 object 类型值,用于配置对象的属性
  • required 是一个数组,它列出了当前对象中所有必需的属性名

有了以上知识,基本上已经够我们编写一个 JSON Schema 文档来对 JSON 数据进行最简单的验证了。

参考

json-schema.org:这就是官网

json-schema-org.github.io:官网的源码,居然是开源的