什么是 JSON Schema?
答:一言以蔽之:JSON Schema 之于 JSON ,就像 TypeScript 之于 JavaScript
我们知道,JSON 作为主要的前后端交互格式,已经称霸多年了,json 的本质就是对象,它足够轻量、简单、易读,但是它也存在它的问题。
即:没有格式校验
比方说:一段 JSON 代码如下
{
number:10,
street_name:"唐宁街",
street_type:"Avenue"
}
尽管这段 json 对开发的人来说简单明了,我们很容易就知道它是表示一个街道信息的对象,但仍然存在一些问题,比如:
好了,JSON Schema 可以解决这一点。
JSON Scheme 表示如下:
{
"$schema": "http://json-schema.org/schema#",
"$id": "http://yourdomain.com/schemas/myschema.json",
"title": "Street",
"description": "it is a Street object",
"type": "object",
"properties": {
"number": {
"type": "number"
},
"street_name": {
"type": "string"
},
"street_type": {
"type": "string",
"enum": ["Street", "Avenue", "Boulevard"]
}
},
"required": ["number", "street_name"]
}
"
这样一来,普通的 json 就被描述了,被规定格式了,被校验了!
合法的:
{
"number": 1600,
"street_name": "Pennsylvania",
"street_type": "Avenue",
"direction": "NW"
}
不合法的:
{
"number": 1600,
"street_name": "Pennsylvania",
"street_type": "super-speed"
}
因为:street_type 的值不属于限定中的枚举值
好了,再来看 "
title
:标题description
:描述除了上面所说属性以外,JSON Schema 还规定了很多其它属性,比如:maximum
、minimum
大于小于,pattern
正则校验,items
限定数组中的每一项的类型 等等。
例:
···
"phone": {
"description": "The contact for a person",
"type": "string",
"pattern": "^[13|14|15|16|17|18|19][0-9]{9}$"
},
···
更多高阶用法,比如对象之间的引用、生成递归结构、dependencies,additionalItems,consts, allOf, anyOf, oneOf, not, if……then……else 等等等,了解更多在官网:json-schema.org 或者 understanding-json-schema
所以,综上,说:JSON Schema 之于 JSON ,就像 TypeScript 之于 JavaScript,非常准确。
另外:提供一些辅助工具在线地址,拿去玩(●'◡'●):
你学废了吗?