JSON Schema:json的说明书

先来说说json

{
  "title": "JSON Schema 发展简史",
  "version": "2020-12",
  "description": "诞生于JSON数据格式的标准化需求,从最初的验证工具发展为跨领域的数据契约语言",
  "keywords": ["API规范", "数据建模", "自动化测试", "低代码平台"],
  "ecosystem": {
    "tools": ["Ajv", "Draft", "jsonschema"],
    "adopters": ["OpenAPI", "Postman", "AWS AppSync"]
  }
}

JSON 作为轻量级数据交换格式,凭借简洁性成为现代应用的 “数字血液”。但随着微服务架构普及、低代码平台兴起、数据治理需求深化,单纯的 JSON 格式已无法满足复杂场景下的数据描述需求。

JSON Schema 应运而生,它以元数据语言的形式定义 JSON 数据的结构、类型、约束和语义,让无序的数据拥有 “语法规则”,成为 API 设计、数据校验、文档生成等场景的核心工具。

一句话总结来说,JSON Schema 是 json 的定义文档

比方说,服务A为输入身份证号查询身份信息 ,调用请求参数为 json
那么我是传入以下三种中哪种格式呢

-------------------------

{
    "idcard": 123
}

-------------------------

{
    "idcard": "123"
}

-------------------------

[
    {
        "id_card": "123"
    }
]

-------------------------

这个时候,就需要 JSON Schema 来定义了

一、核心使用场景

场景 1:API 接口契约定义

在前后端分离架构中,JSON Schema 可作为接口文档的 “活契约”。例如定义用户注册接口的请求体:

{
  "type": "object",
  "properties": {
    "username": { "type": "string", "minLength": 6, "pattern": "^[a-zA-Z0-9_]{6,20}$" },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 18, "maximum": 120 }
  },
  "required": ["username", "email"]
}

业务场景

  • 前端可基于 Schema 生成表单校验逻辑,`
  • 后端也可用对应的类库包做参数校验可自动实现参数校验
  • 工具链(Swagger/OpenAPI)可直接生成交互式文档

场景 2:数据管道校验

在数仓/ETL(Extract-Transform-Load)流程中,JSON Schema 用于验证上游系统传输的数据是否符合下游存储/计算要求。例如物联网设备上报数据校验:

{
  "type": "object",
  "properties": {
    "deviceId": { "type": "string", "format": "uuid" },
    "timestamp": { "type": "string", "format": "date-time" },
    "metrics": {
      "type": "object",
      "properties": {
        "temperature": { "type": "number", "minimum": -273.15 },
        "humidity": { "type": "number", "minimum": 0, "maximum": 100 }
      }
    }
  },
  "required": ["deviceId", "timestamp", "metrics"]
}

业务场景

  • 数据中台清洗层过滤无效数据
  • 消息队列(Kafka/RabbitMQ)消费者前置校验
  • 大数据平台离线任务数据质量监控

场景 3:低代码平台数据建模

在低代码开发场景中,JSON Schema 可定义业务对象的数据结构,实现 “模型即 Schema” 的动态表单生成。例如电商订单模型:

{
  "type": "object",
  "properties": {
    "orderId": { "type": "string", "format": "custom-order-id" }, // 自定义格式
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "sku": { "type": "string" },
          "quantity": { "type": "integer", "minimum": 1 }
        },
        "required": ["sku", "quantity"]
      },
      "minItems": 1
    },
    "totalAmount": { "type": "number", "exclusiveMinimum": 0 }
  }
}

优势

  • 无需编写实体类即可生成 CRUD 界面
  • 通过format扩展支持枚举值、正则表达式等业务规则
  • 与数据库 Schema 映射实现模型驱动开发(MDD)

二、官方核心规范

这里可看出 JSON Schema 本身就是一个 json,那么谁来定义 JSON Schema 呢,这好比鸡生蛋,谁去生鸡

这个就需要官方大家所共同认可的规范协议来约束了
https://json-schema.org/docs

JSON Schema 通过以下核心规范实现数据描述的标准化(基于 Draft 7 版本):

1. 基础类型定义

关键字 说明 示例值
type 数据类型 "string""array""null"
format 格式约束(扩展机制) "email""date"
enum 枚举值列表 ["male", "female"]

2. 结构约束

关键字 说明 应用场景
properties 对象属性定义 API 请求体字段描述
items 数组元素类型 列表数据校验
required 必填字段列表 防止关键数据缺失

3. 数值范围控制

关键字 说明 示例
minimum 最小值(包含) {"minimum": 18}
maximum 最大值(包含) {"maximum": 100}
exclusiveMinimum 最小值(不包含) {"exclusiveMinimum": 0}

当然,市面上也有很多的在线网站/类库,帮你做 JSON Schema 的转换生成

三、生态工具链:实际业务中的全链路支持

  • 设计工具:JSON Schema Generator(根据 JSON 实例自动生成 Schema)、Swagger Editor(可视化 API 设计)
  • 校验工具:Ajv(高性能 JS 校验器)、jsonschema(Python 官方库)
  • 代码生成:Quicktype(根据 Schema 生成 Go/Java/Python 等语言实体类)
  • 测试工具:Postman(基于 Schema 生成测试用例)、Pact(契约测试)

结语:从 “数据格式” 到 “数据契约” 的范式升级

JSON Schema 不仅是技术工具,更是现代软件工程中数据契约的载体。

它让微服务间的数据交互有了 “共同语言”,让低代码平台的模型定义有了 “数字蓝图”,让复杂系统的数据治理有了 “度量标尺”。

随着云原生、AI 原生时代的数据流通需求爆发,JSON Schema 正从边缘工具走向技术架构的核心层,成为连接不同系统、不同团队、不同技术栈的数据 “通用语言”。

power by Qwen

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容