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. 多线性方程组迭代算法——Gauss-Seidel迭代算法的Python实现

    多线性方程组(张量)迭代算法的原理请看这里:原理部分请留言,不方便公开分享 Jacobi迭代算法里有详细注释:多线性方程组迭代算法——Jacobi迭代算法的Python实现 import numpy ...

  2. rabbitmq-5-案例2-简单的案例+exchange

    Exchange交换机: sendMessage端,发送消息到Exchage1.2, 然后交换机通过路由键,将消息转发给队列queue中,最后客户端从队列中获取消息 交换属性: name:名称 typ ...

  3. 第十章 Ingress

    一.资料信息 Ingress-Nginx github 地址:https://github.com/kubernetes/ingress-nginx Ingress-Nginx 官方网站:https: ...

  4. centos7 iperf3安装

    iperf3快速安装 wget -O /usr/lib/libiperf.so.0 https://iperf.fr/download/ubuntu/libiperf.so.0_3.1.3 wget ...

  5. github 配置ssh

    https://www.cnblogs.com/superGG1990/p/6844952.html

  6. Delphi 格式化函数 Format函数

    function Format(const Format: string; const Args: array of const): string; function Format(const For ...

  7. HTTP 错误 500.21 - Internal Server Error处理程序“NickLeeCallbackHandler”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    HTTP 错误 500.21 - Internal Server Error处理程序“NickLeeCallbackHandler”在其模块列表中有一个错误模块“ManagedPipelineHand ...

  8. 因为看见,所以发现:QBotVariant谢绝落幕

    互联网给人带来便捷的同时,其公开大量的资源也同样给恶意利用者带了便捷,越来越多公开的恶意程序源码降低了对外攻击.入侵的难度,使得安全问题愈加严重. 阿里云安全团队从今年5月份监测到一BOT家族,其样本 ...

  9. html2canvas截图白边显示问题

    html2canvas(document.getElementById('resource_chart'),{ useCORS:true, logging:false, width:$('#resou ...

  10. QT树莓派交叉编译开发环境搭建

    QT树莓派交叉编译开发环境搭建 - JerryZone <Cross-compiling Qt Embedded 5.5 for Raspberry Pi 2> <Qt for Em ...