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 条评论
登录 后参与评论

相关文章

来自专栏编程心路

SSH框架之旅-hibernate(1)

什么是框架呢?个人觉得在软件设计中,框架可以看作是架构组件。如果把整个程序看作是一个人的话,那么框架可以看出是一个人的骨架,我们要做的的就是在这个框架的基础上进...

783
来自专栏salesforce零基础学习

salesforce零基础学习(八十一)更改标准字段的label名称(Admin)

我们在开发中往往需要考虑国际化功能,salesforce 提供了国际化功能,在search部分搜索translate,便可以找到translate部分,从而对需...

2195
来自专栏阮一峰的网络日志

JavaScript 模块的循环加载

"循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本。 // a.js var b = requir...

3085
来自专栏面朝大海春暖花开

hibernate for循环执行添加操作出错问题

hibernate插入对象的时候,对于id唯一,数据库设置为自增的时候执行完操作后会将id赋予该对象

791
来自专栏散尽浮华

时区提示:Local time zone must be set--see zic manual page 2018的解决办法

问题描述:在centos服务器上执行date命令时,显示的时间信息中的时区不正常,如下: [root@ulocalhost ~]# date Mon Apr ...

4235
来自专栏青青天空树

mfc学习之路--如何删除通过控件新增的变量

   刚刚学校mfc的人都会遇到这样一个问题(比如我),在照做书做一个mfc程序,给控件新增变量时变量类型错了,但是变量名对了,然后想要加个正确的时候提示"已经...

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

《linux c编程指南》学习手记5

8.1 流简介 打开:fopen()   标准输入、标准输出、标准错误   关闭:fclose(); 8.2.1 流的打开与关闭 fopen  打开特定的文件 ...

1738
来自专栏前端开发

简单的封装ajax函数

1877
来自专栏null的专栏

python技巧——Python的读文件

在Python中,读文件的命令有如下的三个: read() readline() readlines() 1、read()        read()函数是一次...

3264
来自专栏技巅

分布式日志收集系统: Facebook Scribe之结构及源码分析

1272

扫码关注云+社区