什么是JSON Schema

JSON Schema是一种声明式语言,用JSON语法编写,用于描述和验证JSON对象的格式和结构。截止目前,最新版本为 draft-07。我们知道,JSON常用于跨语言数据交换,那么JSON Schema在其中的应用场景有哪些?

  • WEB前端/后端验证用户提交的表单数据;
  • 微服务数据传递时,验证数据的准确性;
  • 作为某平台,验证商户数据结构和格式等信息;
  • 作为框架的JSON配置文件,描述配置文件所需的字段,类型,是否必填等信息;
  • .......

使用JSON Schema有哪些优势?

  • 可读性强:JSON Schema 支持多语言,对人和机器都很友好,容易看懂;
  • 持续更新:JSON Schema 标准一直保持更新,常用的验证要求都能满足;
  • 方便分享:JSON Schema 本身是一段JSON,所有文本编辑器都可编辑,无论是分享JSON片段还是JSON文件,都很方便。

JSON Schema 示例

{
  "$id": "https://example.com/person.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Person",
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string",
      "description": "The person's first name."
    },
    "lastName": {
      "type": "string",
      "description": "The person's last name."
    },
    "age": {
      "description": "年龄字段必须大于或等于0",
      "type": "integer",
      "minimum": 0
    }
  }
}

上面这段JSON Schema 实例描述了对象的firstName、lastName和age字段,并要求age字段最小值为0。

  • $id 关键字,定义Schema的URI
  • $schema 关键字,定义Schema版本或位置
  • title 定义标题,值必须是字符串
  • type 定义实例的数据类型,可选值有:objectarraynumberstringnullboolean,可参考前面小节的教程
  • properties 定义属性,其值必须为对象
    • description 字段描述
    • type 如上
    • minimum 指定属性最小值

更多可用关键字请参考:官方文档,下面实例能满足以上定义的 JSON Schema。

{
  "firstName": "John",
  "lastName": "Doe",
  "age": 21
}

JSON Schema 开源库

语言 验证库
JavaScript ajv draft-07, -06, -04
djv draft-06, -04
vue-vuelidate-jsonschema draft-06
Python jsonschema draft-07, -06, -04, -03
Java
everit-org/json-schema draft-07, -06, -04
Justify draft-07
Go
gojsonschema draft-07, -06, -04
santhosh-tekuri/jsonschema draft-07, -06, -04
qri-io/jsonschema draft-07
C WJElement draft-04, -03
C++ f5-json-schema draft-07
PHP
Opis Json Schema draft-07, -06
Swaggest Json Schema draft-07, -06, -04
Ruby JSONSchemer draft-07, -06, -04
.NET Json.NET Schema draft-07, -06, -04, -03 
Manatee.Json draft-07, -06, -04
Objective-C DSJSONSchemaValidation draft-07, -06, -04
Web Online
JSON Schema Validator draft-07, -06, -04, -03
JSON Schema Lint draft-06, -04, -03, -02, -01
Command Line
ajv-cli draft-07, -06, -04
Polyglottal JSON Schema Validator draft-06, -04