json-schema入门

json-schema(一)

相关知识点

  1. 它是什么 描述json的数据格式
  2. 有什么优点
    • 描述自定义的数据格式
    • 清晰,对人和机器友好
    • 完整的结构校验
      • 自动化测试
      • 校验表单提交数据

一个简单的示例构建自己的json-schema

一个数据对象或者API的数据是这样的

{
    "id": 1,
    "name": "A green door",
    "price": 12.50,
    "tags": ["home", "green"]
}

json-scheme类似xml或者html,有一个声明的头

这里可以看到有文档遵循的协议格式,标题,描述以及文档的类型

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Product",
    "description": "A product from Acme's catalog",
    "type": "object"
}

如何描述对象的属性,以及对象属性上的规则

"properties": {
    "id": {
        "description": "The unique identifier for a product",
        "type": "integer"//数据的类型
    },
    "name": {
        "description": "Name of the product",
        "type": "string"
    },
   "price": {
       "type": "number",
       "minimum": 0,//最小值
       "exclusiveMinimum": true//排除掉最小值,不允许为0
   },
   "tags": {
       "type": "array",//数据的类型是数组
       "items": {//数组里每个item都是字符串
           "type": "string"
       },
       "minItems": 1,
       "uniqueItems": true
   }
},
"required": ["id", "name"]

实际应用

  1. 数据校验

完成表单数据校验,数据类型,格式定义和实际dom分离 schema

var validation = schema.validate({

    q: 'OK',
    start: -5,
    num: -100.99,
    xyz: 'additionalProperty'
})

未压缩情况下面加起来不到20kb,压缩体积会更小,适合数据校验

直出后这里node后台层应该是需要一个强类型的结构来定义协议,jsonschema是个不错的选择

  1. 通过json-scheme生成表单,动态配置属性,json格式可以在外部定义,可以继承等等

json-editor

  1. jsonschema数据格式生成器

jsonschema.net 使用者自己书写数据,框架根据数据生成格式

  1. 文档格式生成器

demo 目前仅支持jade语法。。。。

  1. 数据格式的重用,继承
    • 直接引用另一个jsonschema中定义的类型
    • 通过运算符对引用的json格式做扩展,引入

相关文档可参考这里

工具支持

方便书写jsonschema格式 vm工具 json schema lint 一个在线的格式检验工具,可以作为插件集成到构建中去

相关标准文档

  1. json-schema core 描述基本的json schema格式
  2. json-schema validate 描述json-schema的校验标准

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

Makefile经典教程(掌握这些足够)

makefile很重要       什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个...

681
来自专栏用户2442861的专栏

linux sed命令使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

532
来自专栏技术专栏

慕课网Flask高级编程实战-7.静态文件、模板、消息闪现与Jinja2

Flask访问静态文件非常简单,只需要在项目根目录建立static文件夹。将静态资源文件放入static下即可。访问的时候访问http://ip:port/st...

623
来自专栏NetCore

密码最短长度为7,其中必须包含以下非字母数字字符1 完美解决方案

大家用2005网站配置中遇到"密码最短长度为7,其中必须包含以下非字母数字字符1" 问题没有? 在这里给出解决方法: 方法一:7位密码中请用输入~!@#$^...

1946
来自专栏PHP技术

WordPress的可拓展性初探(二)

作者:西瓜玩偶(racnil070512 at hotmail dot com) 上一篇文章介绍了如何设计数据库,从而达到可拓展性的目的。下面的篇幅将介绍在P...

32812
来自专栏小尘哥的专栏

thymeleaf全局常量定义

目测应该是重写这货就可以了,talk is cheap,show me the code

551
来自专栏xingoo, 一个梦想做发明家的程序员

判断文件类型

判断一个文件是否是符号链接文件,并移入指定的文件夹 1 #!/bin/bash 2 #filename:type 3 FILENAME= 4 echo "Inp...

2129
来自专栏小白客

Python基础学习-文件和异常

学习处理文件和保存数据可让你的程序使用起来更容易,学习处理异常可帮助你应对文件不存在的情况,以及其他可能导致程序崩溃的问题。通过本章的学习可提高程序的适用性、可...

3226
来自专栏程序员互动联盟

【答疑释惑】getchar和getch

getchar有一个int型的返回值.当程序调用getchar时。程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲...

2647
来自专栏Python爬虫与算法进阶

Python中的小魔法(二)

01 函数 局部变量 x = 66 def func(x): print('x等于', x) x = 6 print('局部变量x改变...

2524

扫码关注云+社区