jsonSchema 的应用场景有很多,毕竟现在各个接口传输数据基本都是json,比如你做测试想对部分json字段进行校验或者统计你该如何写?解析json获取字段然后if else?
不是说不可以但是也太low了,完全可以用jsonSchema来解决这个问题。有人就会说了,可是我不会啊,不会写jsonSchema,也不知道怎么用。 没关系问题不大,几分钟就能搞定的问题
首先让我们取一个json 样例数据

{
"task_id": "f0f951a8-9883-11e9-a4ac-f0000aff48a4",
"success": 1000,
"result": {
"code": 1000,
"bad_cnt": 0,
"doubtList": [{
"phone": "",
"name": "贷款",
"key": "贷"
}],
"small_rate": 0.0,
"invalid_cnt": 11,
"phone_small": {
"": false,
"": true
}
}
}

然后打开网址 https://app.quicktype.io/#l=schema  输入json生成schema
如果你仔细观察一下的话你会发现,结构其实和你的json差不多是对应的,但是还不能直接用,下面我们只需要对照这个schema做一点修改就可以投入使用了

{
"$schema": "http://json-schema.org/draft-06/schema#",
"$ref": "#/definitions/Welcome",
"definitions": {
"Welcome": { # 名字随便起
"type": "object",
"additionalProperties": false, # 这里要改成true
"properties": {
"task_id": { #task_id 字段的相关验证
"type": "string", #数据类型 字符串
"format": "uuid" #数据格式uuid
},
"success": {
"type": "integer" #数据类型 int
},
"result": {
"$ref": "#/definitions/Result" # result 字段的相关验证对应下面的Result
}
},
"required": [ #表示需要校验的字段,比如我们只需要校验 'success' 可以把别的删除
"result",
"success",
"task_id"
],
"title": "Welcome"
},
"Result": { # 这是是result字段的校验信息
"type": "object",
"additionalProperties": false, # 改成true
"properties": {
"code": {
"type": "integer"
},
"bad_cnt": {
"type": "integer"
},
"doubtList": {
"type": "array",
"items": {
"$ref": "#/definitions/DoubtList"
}
},
"small_rate": {
"type": "integer"
},
"invalid_cnt": {
"type": "integer"
},
"phone_small": {
"type": "object",
"additionalProperties": {
"type": "boolean"
}
}
},
"required": [
"bad_cnt",
"code",
"doubtList",
"invalid_cnt",
"phone_small",
"small_rate"
],
"title": "Result"
},
"DoubtList": {
"type": "object",
"additionalProperties": false,
"properties": {
"phone": {
"type": "string"
},
"name": {
"type": "string"
},
"key": {
"type": "string"
}
},
"required": [
"key",
"name",
"phone"
],
"title": "DoubtList"
}
}
}

好,现在开始正式干活

a = {
"task_id": "f0f951a8-9883-11e9-a4ac-f0000aff48a4",
"success": 1000, #比如我们现在要检验这个字段必须是1000,具体字段条件咨询百度,
"result": {
"code": 1000,
"bad_cnt": 0,
"doubtList": [{
"phone": "",
"name": "贷款",
"key": "贷"
}],
"small_rate": 0.0,
"invalid_cnt": 11,
"phone_small": {
"": false,
"": true
}
}
}
#那我们修改schema
s = {
"$schema": "http://json-schema.org/draft-06/schema#",
"$ref": "#/definitions/Welcome",
"definitions": {
"Welcome": {
"type": "object",
"additionalProperties": True,
"properties": {
"success": {
"type": "integer",
"enum":[1000] #限定枚举值
}
},
"required": [
"success"
],
"title": "Welcome"
}
}
}
from jsonschema import validate
try:
validate(s,a)
print('ok')
except:
print('error')

学会了没有?没学会不要紧我们再来一次

a = {
"task_id": "f0f951a8-9883-11e9-a4ac-f0000aff48a4",
"success": 1000,
"result": {
"code": 1000,
"bad_cnt": 0,
"doubtList": [{
"phone": "",
"name": "贷款",
"key": "贷"
}],
"small_rate": 0.0, # 我们要验证这个字段是float 最小值是0
"invalid_cnt": 11,
"phone_small": {
"": false, #顺便验证这个字段是boolean,而且只能是True
"": true
}
}
}
那么schema应该这么改:
{
"$schema": "http://json-schema.org/draft-06/schema#",
"$ref": "#/definitions/Welcome",
"definitions": {
"Welcome": {
"type": "object",
"additionalProperties": True,
"properties": {
"result": {
"$ref": "#/definitions/Result"
}
},
"required": [
"result"
],
"title": "Welcome"
},
"Result": {
"type": "object",
"additionalProperties": True,
"properties": {
"small_rate": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": True
},
"phone_small": {
"type": "object",
"additionalProperties": {
"type": "boolean",
"enum":[True]
}
}
},
"required": [
"phone_small",
"small_rate"
],
"title": "Result"
}
}
}

OK轻松加愉快,照葫芦画瓢就行了。什么?你还想知道别的字段限制条件?有肯定是有的,但是我不会说,因为说了你也记不住,具体用的时候自行百度。

JsonSchema 启蒙的更多相关文章

  1. JSON-SCHEMA

    这几天在写代码,和开发那边规范统一后,注释的JOSN需要写清楚schema, 于是学习了一下,国内的东西确实很少,看官网的英文文档也很蛋疼. 就把自己和看到的总结一下: http://json-sch ...

  2. C++“窗体”程序设计启蒙

    [摘要]本文以C++菜菜鸟(仅仅须要学习了C++数据类型和控制结构就可以)为目标读者,用求解一元二次方程作为实例,展示窗体式程序的开发过程,获得初步体验.写作目的包含:(1)让学生通过模仿,开发出类似 ...

  3. .Net使用JsonSchema验证Json

    最近项目中遇到了这样的需求,需要对上传的Json进行验证,以确保Json数据的准确性.前后使用了两种方式来验证: (1)第一种方式的实现思想:根据Json数据的格式,严格定义相应的类结构,并在Syst ...

  4. MyCat 启蒙:分布式系统的数据库架构演变

    文章首发于[博客园-陈树义],点击跳转到原文<MyCat 启蒙:分布式系统的数据库架构演变> 单数据库架构 一个项目在初期的时候,为了尽可能快地验证市场,其对业务系统的最大要求是快速实现. ...

  5. python项目使用jsonschema进行参数校验

    python项目使用jsonschema进行参数校验 最近想要给一个新的openstack项目加上参数校验,过完年回来准备开工的时候,发现其他人已经在做了,对应的patch是:https://revi ...

  6. Zookeeper 启蒙

    2018-12-14 关键词: Zookeeper入门介绍 . Zookeeper是什么.Zookeeper架构解析.Zookeeper应用场景.Zookeeper有什么用 本篇文章系笔者依据当前所掌 ...

  7. [JsonSchema] 关于接口测试 Json 格式比对核心算法实现 (Java 版)

    引言 为什么要自己重新造轮子,而不是采用第三方的JsonSchema方法进行实现存在以下痛点:1.我之前在网上找了很久,没有找到java版直接进行jsonschema生成的方法或直接比较的方法2.ht ...

  8. 第零章 HTML启蒙知识与网站开发流程

    Web前端启蒙知识:1.软件架构模式a)B/S架构:Browser-Server 浏览器服务器模型b)C/S架构:Client-Server 客户端服务器模型注1:浏览器是运行网页的应用程序注2:B/ ...

  9. 利用JsonSchema校验json数据内容的合规性(转)

    原文地址:Json schema 背景: 复杂的AJAX应用程序可以与数百个不同的JSON服务进行交互,因此,引入对客户端验证的需求. 在处理校验问题方面有着很多的工具,但是通常可以将它们归为以下几类 ...

随机推荐

  1. Apache Shiro 会话+缓存+记住我(三)

    1.会话管理SessionDao和SessionManager 1)安装Redis 2)依赖 <dependency> <groupId>redis.clients</g ...

  2. 【笔记目录2】ASP.NET Core分布式项目实战

    当前标签: ASP.NET Core分布式项目实战 共2页: 上一页 1 2  11.ClientCredential模式总结 GASA 2019-03-11 12:59 阅读:26 评论:0 10. ...

  3. JS事件循环(Event Loop)机制

    前言 众所周知,为了与浏览器进行交互,Javascript是一门非阻塞单线程脚本语言. 为何单线程? 因为如果在DOM操作中,有两个线程一个添加节点,一个删除节点,浏览器并不知道以哪个为准,所以只能选 ...

  4. Android中Parcelable的原理和使用方法

    Parcelable的简单介绍 介绍Parcelable不得不先提一下Serializable接口,Serializable是Java为我们提供的一个标准化的序列化接口,那什么是序列化呢? 进行And ...

  5. setclock - 用系统时间来设置硬件时间

    总览 setclock 描述 setclock 用当前系统时钟存储的时间设置系统的硬件时间. 它先读取 /etc/sysconfig/clock 的时间格式, 时间存储前应该转化成这种格式. Red ...

  6. Ansible --05 ansible jinja2

    ansible jinja2 什么是jinjia2模板 jinjia2是Python的全功能模块引擎 Jinjia2与Ansible的关系 Ansible通常会使用jinjia2模板来修改被管理主机的 ...

  7. 如何在YouTube上下载视频

    1,首先要有科学上网的工具 2,详细说明:https://en.savefrom.net/1-how-to-download-youtube-video/

  8. GCC -l选项:手动添加链接库

    链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件.在链接过程中,它必须把符号(变量名.函数名等一些列标识符)用对应的数据的内存地址(变量地址.函数地址等)替代,以完成程 ...

  9. array_shift — 将数组开头的单元移出数组

    <?php $stack = array("orange", "banana", "apple", "raspberry&q ...

  10. python3 线程调用与GIL 锁机制

    转载