JSON Schema 的详细和使用

26 min read

JSON Schema 是一个用来描述 JSON 数据格式的约束语言,可以用于验证 JSON 数据的有效性、文档生成、API 文档生成等场景。它使用 JSON 格式表示,可以定义 JSON 对象的属性、数据类型、枚举值、格式规则等。

JSON Schema 的基本构成是一个 JSON 对象,包含以下常见关键字:

  1. $schema:用于指定所使用的 JSON Schema 版本。
  2. title:用于指定 JSON Schema 的标题。
  3. type:用于指定属性的数据类型,包括字符串、数字、布尔、数组、对象等。
  4. properties:用于定义属性的约束条件,是一个 JSON 对象,键为属性名,值为该属性的约束条件。
  5. required:用于指定必须存在的属性,是一个数组,包含需要的属性名。
  6. additionalProperties:用于指定是否允许额外的属性存在。
  7. enum:用于指定枚举值,是一个数组,包含合法的取值。

除了上述常见关键字外,JSON Schema 还提供了许多其他关键字来定义更复杂的约束条件,例如:

  1. pattern:用于指定字符串的正则表达式格式。
  2. format:用于指定字符串的特定格式,如日期、时间、邮件地址等。
  3. minimum、maximum:用于指定数字的最小值和最大值。
  4. uniqueItems:用于指定数组元素是否唯一。
  5. items:用于定义数组元素的约束条件。
  6. dependencies:用于指定属性之间的依赖关系。

使用 JSON Schema 可以轻松地进行数据验证。例如,假设有以下的 JSON 数据和对应的 JSON Schema:

// JSON 数据
{
  "name": "Alice",
  "age": 20,
  "email": "[email protected]",
  "books": ["book1", "book2"]
}

// JSON Schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "User",
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "age": {
      "type": "integer",
      "minimum": 0,
      "maximum": 120
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "books": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": ["name", "email"]
}

可以使用 JSON Schema 验证上述 JSON 数据是否满足约束条件。验证结果可以告知数据是否有效,以及不满足约束条件的具体原因。