JsonSchema 启蒙
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 启蒙的更多相关文章
- JSON-SCHEMA
这几天在写代码,和开发那边规范统一后,注释的JOSN需要写清楚schema, 于是学习了一下,国内的东西确实很少,看官网的英文文档也很蛋疼. 就把自己和看到的总结一下: http://json-sch ...
- C++“窗体”程序设计启蒙
[摘要]本文以C++菜菜鸟(仅仅须要学习了C++数据类型和控制结构就可以)为目标读者,用求解一元二次方程作为实例,展示窗体式程序的开发过程,获得初步体验.写作目的包含:(1)让学生通过模仿,开发出类似 ...
- .Net使用JsonSchema验证Json
最近项目中遇到了这样的需求,需要对上传的Json进行验证,以确保Json数据的准确性.前后使用了两种方式来验证: (1)第一种方式的实现思想:根据Json数据的格式,严格定义相应的类结构,并在Syst ...
- MyCat 启蒙:分布式系统的数据库架构演变
文章首发于[博客园-陈树义],点击跳转到原文<MyCat 启蒙:分布式系统的数据库架构演变> 单数据库架构 一个项目在初期的时候,为了尽可能快地验证市场,其对业务系统的最大要求是快速实现. ...
- python项目使用jsonschema进行参数校验
python项目使用jsonschema进行参数校验 最近想要给一个新的openstack项目加上参数校验,过完年回来准备开工的时候,发现其他人已经在做了,对应的patch是:https://revi ...
- Zookeeper 启蒙
2018-12-14 关键词: Zookeeper入门介绍 . Zookeeper是什么.Zookeeper架构解析.Zookeeper应用场景.Zookeeper有什么用 本篇文章系笔者依据当前所掌 ...
- [JsonSchema] 关于接口测试 Json 格式比对核心算法实现 (Java 版)
引言 为什么要自己重新造轮子,而不是采用第三方的JsonSchema方法进行实现存在以下痛点:1.我之前在网上找了很久,没有找到java版直接进行jsonschema生成的方法或直接比较的方法2.ht ...
- 第零章 HTML启蒙知识与网站开发流程
Web前端启蒙知识:1.软件架构模式a)B/S架构:Browser-Server 浏览器服务器模型b)C/S架构:Client-Server 客户端服务器模型注1:浏览器是运行网页的应用程序注2:B/ ...
- 利用JsonSchema校验json数据内容的合规性(转)
原文地址:Json schema 背景: 复杂的AJAX应用程序可以与数百个不同的JSON服务进行交互,因此,引入对客户端验证的需求. 在处理校验问题方面有着很多的工具,但是通常可以将它们归为以下几类 ...
随机推荐
- Java GC算法
转自:http://blog.csdn.net/heyutao007/article/details/38151581 1.JVM内存组成结构 JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,结 ...
- python基础--二分查找
# 二分查找 def sort_search(lst,key): """ 二分查找 :param lst: 有序数列 :param key: 要查找的关键值 :retur ...
- Rikka with Nickname (简单题)
Rikka with Nickname 链接:https://www.nowcoder.com/acm/contest/148/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒空间限制:C/ ...
- 【记录】linux 文件权限的查看和修改
从上图可以看出每个文件权限与类型都是不一样的,如果对各个字母表达的含义不了解,那么看的真是一脸懵逼. 别急,具体解释如下: d rwx rwx rwx - rwx r-- rw- 第一列含义 ...
- 前端学习(二十三)DOM操作,事件(笔记)
javascript 组成部分 1.ECMAScript javascript的核心解释器 2.DOM Document Object Modle 文 ...
- CUDA学习之二:shared_memory使用,矩阵相乘
CUDA中使用shared_memory可以加速运算,在矩阵乘法中是一个体现. 矩阵C = A * B,正常运算时我们运用 C[i,j] = A[i,:] * B[:,j] 可以计算出结果.但是在CP ...
- 【串线篇】SpringMVC九大组件
SpringMVC中的Servlet一共有三个层次,分别是HttpServletBean.FrameworkServlet和 DispatcherServlet. HttpServletBean直接继 ...
- 【串线篇】SpringMvc数据传出
/** * SpringMVC除过在方法上传入原生的request和session外还能怎么样把数据带给页面 * * 四大域: * pageContext:${pageScope.msg }< ...
- Spark核心原理初探
一.运行架构概览 Spark架构是主从模型,分为两层,一层管理集群资源,另一层管理具体的作业,两层是解耦的.第一层可以使用yarn等实现. Master是管理者进程,Worker是被管理者进程,每个W ...
- Vue学习笔记【27】——Vue路由(设置路由)
设置路由高亮 css: .router-link-active, /* vue-router*/ .myactive { color: red; font-weigh ...