本文地址:Json Schema 是什么?git
简单说,Json Schema
其实就是一个标准的 Json 串,它以一个 Json 串来描述咱们须要的数据规范,而且支持注释以及验证 Json 文档,即咱们能够用 Json Schema 来验证所给的 Json 串是否知足咱们须要的数据格式规范。github
一样能用来表示数据的还有一种格式 XML,为何 Json Schema 恰恰要用 Json 来进行表示数据呢?对于机器,其实这两种方式是没有区别的,机器只要你把标准给了它,它都能用很快的速度识别出来(相对于咱们人),可是 XML 对于人识别就太不友好了。好比,假设咱们须要描述一个班级的两我的:web
对于 XML:json
<class> <name>实验1班</name> <no>1801</no> <students> <student> <name>张三</name> <sex>女</sex> </student> <student> <name>李四</name> <sex>男</sex> </student> </students> </class>
使用 Json:数组
{ "class": { "name": "实验1班", "no": "1801", "students": { "student": [ { "name": "张三", "sex": "女" }, { "name": "李四", "sex": "男" } ] } } }
有没有以为 Json 立马秒杀 XML?这里可能感受还不是很明显,这是由于层级比较少,层级再多以后,Json 的优点立马就显现出来了。ide
Json Schema 在咱们平时的工做中最经常使用的有两个,一个就是上面说的用于验证 Json 串的合法性;另外一个就是用于定义咱们的 API,定义好 API 后,咱们能够直接用工具生成咱们的 API,这样利于咱们对 API 的维护。svg
好比,咱们定义的 Json Schema 为:工具
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Product", "description": "A product from Acme's catalog", "type": "object", "properties": { "id": { "description": "The unique identifier for a product", "type": "integer" }, "name": { "description": "Name of the product", "type": "string" }, "price": { "type": "number", "minimum": 0, "exclusiveMinimum": true } }, "required": ["id", "name", "price"] }
在上述 Json Schema 中ui
$shcema
是一个关键字,它表示咱们所定义的 Schema 和 http://json-schema.org/draft-04/schema#
(Json Schema 的 v4 规范)是一致的title
指的是标题。description
用于描述咱们所定义的 Schema,上述代表咱们定义的是一个来自 Acme 目录的商品。type
表示咱们定义的是一个 object
对象。properties
中就是 Schema 的属性了,这里面的是核心。咱们能够看到该 Schema 一共有三个属性,分别是 id(integer)
, name(string)
, prince(number)
。required
代表三个属性都是必须的。给定了上述 Schema,咱们就能够验证给定的 Json 是不是合规的了。好比:code
{ "id": 1, "name": "watermelon" }
显然,这个 Json 缺乏了一个属性 price,因此它不合规。
{ "id": 1, "name": ["knife", "spoon"], "price": 4 }
这个 Json 的 name 属性是一个数组,咱们上面规定 name 只能是 String,显然这个也不是合规的。
{ "id": 1, "name": "watermelon", "price": 4 }
这个,就知足了上面定义的全部规则,所以这个是一个合规的 Json。
其实,使用咱们上面的 Json Schema 便能进行 API 的定义了,只不过是定义 API 的话可能还须要更多的支持。好比,对于 Java,咱们须要能实现 extend 等关键字的支持,还须要能进行枚举 enum 类型等的定义。这里只简单使用上述的内容显然不够了,咱们还须要扩充一些关键字的使用。
目前,你们使用最多的将 Json Schema 转换为 Java Bean 的一个库是 jsonschema2pojo,后面我将依托这个库支持的内容对 Json Schema 的格式进行深刻解析,此库支持的也是比较通用的。