JSON Schema的应用(具体的使用场景)

什么是JSON Schema

JSON Schema 是用于验证 JSON 数据结构的强大工具,Schema可以理解为模式或者规则。

要定义 JSON Schema 是什么,我们可能应该首先定义 JSON 是什么。JSON 代表“JavaScript Object Notation”,一种简单的数据交换格式。它最初是作为万维网的符号。由于 JavaScript 存在于大多数 Web 浏览器中,并且 JSON 基于 JavaScript,因此很容易支持。然而,它已被证明足够有用且足够简单,以至于它现在被用于许多其他不涉及网上冲浪的环境中。

JSON Schema 本身是用 JSON 编写的。它是数据本身,而不是计算机程序。它只是一种用于“描述其他数据结构”的声明性格式。

JSON Schema demo

以Object类型为例,列举在JSON Schma所经常用到的关键字,如下

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "$id": "https://example.com/schemas/person",
  "title": "base info",
  "description": "base information about person",
  "type": "object",
  "required": ["name", "age", "phone"],
  "definitions": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10
    }
  },
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10
    },
    "age": {
      "type": "number",
      "minimum": 18,
      "exclusiveMinimum": true,
      "maximum": 65,
      "exclusiveMaximum": true
    },
    "phone": {
      "type": "string",
      "pattern": "^1\\d{10}$"
    },
    "parents": {
      "type": "array",
      "items": [{ "$ref": "#/definitions/name" }],
      "minItems": 1,
      "maxItems": 2,
      "uniqueItems": true
    },
    "address": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string",
          "enum": ["guangzhou", "beijing"]
        }
      }
    }
  }
}

关键字描述

关键字描述
$schema声明此json片段属于JSON Schema,并遵循所声明的JSON Schema版本规范
$id为JSON Schema声明一个统一资源标识符,使解析$ref时能够引用片段
title为JSON Schema文件提供标题
description为JSON Schema文件提供描述信息
definitions声明子schema,使解析$ref能够引用片段
$ref引用JSON Schema片段
required定义对象类型properties所声明的字段是否必须,值必须是数组,数组中的元素必须是字符串类型且唯一
type定义元素的类型
properties定义对象类型里的属性(键值对),每个字段的值都是一个有效的schema片段,用来限制每个字段的格式
minimum约束取值范围,标识取值范围应该大于或等于minimum
exclusiveMinimum假若minimum或exclusiveMinimum同时存在,且exclusiveMinimum为true,则取值范围大于minimum
maximum约束取值范围,标识取值范围应该小于或等于maximum
exclusiveMaximum假若maximum或exclusiveMaximum同时存在,且exclusiveMaximum为true,则取值范围小于maximum
minLength字符串类型数据的最小长度
maxLength字符串类型数据的最大长度
pattern使用正则表达式约束字符串类型数据
items用来定义数组类型的子元素,值必须为数组,且是一个有效的schema片段
minItems定义数组类型大小的最小长度
maxItems定义数组类型大小的最大长度
uniqueItems定义数组类型子元素是否必须唯一
enum用来限制值的范围,值必须在enum所指定的集合里面

以上是比较常用到的关键字,还有一些其他的关键字可以阅读官方文档进行深入地了解和使用

Understanding JSON Schema

应用场景

基于JSON Schema配置文件渲染UI组件

借助vue、react框架组件化理念以及动态渲染组件能力,涌现了许多基于JSON Schema配置文件渲染表单或者组件的库,有效解决通用性组件大量重复使用的场景。通过JSON配置组件乃至页面,能够使代码转化为文件,使数据得以导入导出,便于迁移储存。另外也可以开发可视化编辑器,通过拖拽交互,生成JSON文件,降低开发使用难度。基于这一系列的方案,使开发效率大大提升和降低后续的代码维护。
在这里插入图片描述

vue-json-schema-form

demo地址:https://form.lljj.me/#/demo?type=Simple

请添加图片描述

react-jsonschema-form

demo地址:https://rjsf-team.github.io/react-jsonschema-form/

请添加图片描述

@designable/formily-antd

demo地址:https://tiandisheng.top/~demos/basicdesignable-main

请添加图片描述

数据校验

todo

参考资料

JSON Schema 规范(中文版)
JSON Schema入门和应用
数据校验之JSON Schema

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值