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服务进行交互,因此,引入对客户端验证的需求. 在处理校验问题方面有着很多的工具,但是通常可以将它们归为以下几类 ...
随机推荐
- Linux Kernel中所應用的數據結構及演算法
Linux Kernel中所應用的數據結構及演算法 Basic Data Structures and Algorithms in the Linux kernel Links are to the ...
- 在$CF$水题の记录
CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(a ...
- 微软宣布加入 OpenJDK 项目
近日,微软的 Bruno Borges 在 OpenJDK 邮件列表中发布了一条消息,内容包含接下来发生的事情以及微软如何开始将其团队整合到 OpenJDK 社区.在邮件中,Bruno Borges ...
- c#各类DI容器
IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理. DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现. ...
- 如何减少代码中的if-else嵌套
实际项目中,往往有大量的if-else语句进行各种逻辑校验,参数校验等等,大量的if-else,语句使代码变得臃肿且不好维护,本篇文章结合我自己的经验,就减少if-else语句给出以下几种方案,分别适 ...
- JavaScript寻找最长的单词算法
返回提供的句子中最长的单词的长度. 返回值应该是一个数字. 第一步,使用String.prototype.split()方法将字符串转换成数组 function findLongestWord(str ...
- 如何理解CPU上下文切换(二)
如何理解CPU上下文切换(二) 1.引 你们好,可爱的小伙伴们.^_^ 多个进程竞争CPU就是一个经常被我们忽视的问题. 你们一定很好奇,进程在竞争CPU的时候并没有真正运行,为什么还会导致系统的负载 ...
- ECUST_Algorithm_2019_1
简要题意及解析 1001 求\(a+b\). 数据范围很大,用int或者long long不行.Java和python可以使用大数直接写. 高精度加法:做法就是将数据读入字符串中,数组的每一个单元存一 ...
- iOS项目开发中的知识点与问题收集整理②
1.点击UIButton 无法产生触摸事件 如果在UIImageView中添加了一个按钮,你会发现在默认情况下这个按钮是无法被点击的,需要设置UIImageView的userInteractio ...
- 【leetcode】998. Maximum Binary Tree II
题目如下: We are given the root node of a maximum tree: a tree where every node has a value greater than ...