• 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"]
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    关键字描述

    关键字描述
    $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

  • 相关阅读:
    一键关闭 Win11 系统广告「GitHub 热点速览」
    剑指offer--重建二叉树
    C/C++大写字母的判断 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
    origin中一组线单独设置颜色
    如何使用大语言模型来绘制图画
    2022杭电多校联赛第六场 题解
    K8S安装过程九:Kubernetes Worker 节点安装
    外贸新手如何利用领英寻找你的潜在客户(建议收藏)
    django rest framework 学习笔记-实战商城
    【Leetcode刷题Python】5. 最长回文子串
  • 原文地址:https://blog.csdn.net/tianxintiandisheng/article/details/127449882