JSON Schema

article/2025/8/20 11:51:36

1.JSON Schema的含义

        JSON Schema 是用于验证 JSON 数据结构的强大工具,Schema可以理解为模式或者规则,可以理解为JSON中的正则表达式

2.语法

2.1 type

        作用:约束数据类型

        取值范围:integer,string,object,array,null,boolean,number

import jsonschema
# 准备校验规则
schema = {
"type": "object" # 注意 type 和 后面的 类型,都要放到 ”“ 中!
} #
准备数据
data = {"a": 1, "b": 2}
# 调用函数
res = jsonschema.validate(instance=data, schema=schema)
print(res)

2.2 properties

        作用:是type:object关键字的辅助,用来检测object中每个属性是否满足条件,可以嵌套使用。

schema = {"type": "object","properties": {"success": {"type": "boolean"},"code": {"type:": "integer"},"message": {"type": "string"},"money": {"type": "number"},"address": {"type": "null"},"data": {"type": "object","properties": {  # 对 data 的对象值,进一步进行校验"name": {"type": "string"},"age": {"type": "integer"},"height": {"type": "number"}}},"luckyNumber": {"type": "array"}}
}

2.3 required

        作用:校验对象中必须存在的key,如果不存在则会抛出异常,比如校验一个学生信息的JSON数据,这个数据中必须有name,age,id这三个字段,就可以使用required

data = {"success": True,"code": 10000,"message": "操作成功","data": None,
}  schema = {"type": "object","required": ["success", "code", "message", "data"]
}#校验data是否符合schema,如果不符合则会抛出ValidationError
res = jsonschema.validate(instance=data, schema=schema)

2.4 const

        作用:校验key是否是一某个值,比如 gender 要求为男,就可以使用const

data = {"success": True,"code": 10000,"message": "操作成功","data": None,
}  
schema = {"type": "object","properties": {"success": {"const": True},"code": {"const": 10000},"message": {"const": "操作成功"},"data": {"const": None}},"required": ["success", "code", "message", "data"]
}

2.5 pattern

        作用:校验字符串是否满足正则表达式

        一些基础的正则表达式:

data = {"message": "!jeklff37294操作成功43289hke","mobile": "15900000002"
}  schema = {"type": "object","properties": {"message": {"pattern": "操作成功"},"mobile": {"pattern": "^[0-9]{11}$"}}
}

3.具体实例

import jsonschemadata = {"success": False,"code": 10000,"message": "xxx登录成功","data": {"age": 20,"name": "lily"}
}  schema = {"type": "object","properties": {"success": {"type": "boolean"},"code": {"type": "integer"},"message": {"pattern": "登录成功$"},"data": {"type": "object","properties": {"name": {"const": "lily"},"age": {"const": 20}},"required": ["name", "age"]}},"required": ["success", "code", "message", "data"]
}  #
res = jsonschema.validate(instance=data, schema=schema)

validate方法没有返回值,如果校验通过res的值是None,如果不通过那么就会直接抛出ValidationError


http://www.hkcw.cn/article/DwIjctlQuS.shtml

相关文章

替代 WPS 的新思路?快速将 Word 转为图片 PDF

在这个数字化办公日益普及的时代,越来越多的人开始关注文档处理工具的功能与体验。当我们习惯了某些便捷操作时,却发现一些常用功能正逐渐变为付费项目——比如 WPS 中的一项实用功能也开始收费了。 这款工具最特别的地方在于,可以直接把 W…

华为OD机试真题——Boss的收入(分销网络提成计算)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

中国批准修建最昂贵运河为何受关注 重塑交通格局引发国际热议

中国即将启动一项震惊全球的大工程——浙赣粤运河。该项目总投资3200亿元,刷新了中国运河造价纪录。这条运河北起浙江杭州,穿过江西,南至广东广州的珠江出海口,全长1237公里,其中江西境内占759公里。通过钱塘江、兰江等水系连接杭州,形成贯穿浙赣粤三省的水上通道。从交通…

广东河源24小时内连震两次 市民难眠

广东河源24小时内连震两次 市民难眠!中国地震台网正式测定,5月30日2时21分在广东河源市源城区发生3.0级地震,震源深度10公里,震中位于北纬23.72度,东经114.68度。此次地震震中5公里范围内平均海拔约52米。震中周边200公里内近5年来共发生3.0级以上地震15次,最大地震是202…

74.用户编辑功能在多次修复后仍未成功实现

在用户编辑功能在多次修复后仍未成功实现之后决定换种方法 对于后端则不需要过多修改,只需要修改前端即可 首先,在 data() 中添加新的状态: 用户模板部分可继续沿用之前的方法所留下来的代码 修改start、cancel、save方法 修改现有的 rege…

Void:免费且隐私友好的 AI 编码利器,挑战 Cursor 地位?

开发者圈儿里最近有点小激动,大家都在议论一个叫Void的开源AI代码编辑器。这家伙在GitHub上人气飙涨,短时间内就斩获了超过22.1k的星标,简直成了科技圈的新宠。它被誉为“黑马”,不仅因为它继承了大家都很熟悉的Visual Studio Cod…

Cadence Innvous导出GDS没有STDCELL/IO/NET/VIA问题的解决方法

Cadence Innvous导出GDS之后&#xff0c;可以重新导入Cadence Virtuoso进行查看。 1. Innovus设计完成后的GDS导出命令 导出gds命令&#xff1a; streamOut [-help] <fileName> [-attachNetProp <string>] [-dieAreaAsBoundary] [-libName <string>] [-map…

菲总统任命新国家警察总长 曾主导前总统逮捕行动

菲律宾总统马科斯选定国家警察刑事调查组组长尼古拉斯托雷出任国家警察新任总长。托雷此前主导了逮捕前总统杜特尔特的行动。菲总统执行秘书卢卡斯贝尔萨敏在马拉卡南宫记者会上宣布了这一任命。交接仪式定于6月2日举行,托雷将接替即将退休的现任总长罗梅尔马比尔。托雷成为马…

《深度搜索-R1-0528》

深度搜索-R1-0528 Paper Link &#xff08;纸质链接&#xff09;&#x1f441;️ 1. 引言 DeepSeek R1 模型进行了小版本升级&#xff0c;当前版本为 DeepSeek-R1-0528。在最新的更新中&#xff0c;DeepSeek R1 通过利用增加的计算资源并在后训练期间引入算法优化机制&#x…

男子翻女友手机才发现小丑竟是自己 女子:我们就是牌友

河南许昌,刘先生称和女友恋爱2年多,女友比自己大5岁带三个娃,相处期间两人很和睦,自己给对方还房贷,孩子都叫自己爸爸了,却意外发现她手机里还有男朋友,备注叫大哥。女方:我和刘先生就是牌友,和手机里男友的马上要结婚了,给的钱全是打牌的钱...随后,女方正牌男友来到…

Arduino 编码器

旋转编码器模块 这次我们将使用的旋转编码器为360度KY-040模块&#xff0c;工作电压: 5V&#xff0c;一圈脉冲数: 20&#xff0c;旋转编码器可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数&#xff0c;旋转计数和电位计不一样&#xff0c;这种转动计数是没有限制的…

ppt一键制作:ai自动生成PPT,便捷高效超级精美!

深夜的台灯下&#xff0c;你对着杂乱的 PPT 内容反复刷新灵感&#xff0c;鼠标在字体、配色选项间来回穿梭&#xff0c;好不容易拼凑出的页面&#xff0c;却总透着浓浓的 “廉价感”&#xff1b;汇报在即&#xff0c;逻辑混乱的大纲改了又改&#xff0c;每一页感觉合适又不搭&a…

俞敏洪骑车摔倒深夜发博:感谢关心,皮外伤

5月29日,俞敏洪在青海骑行时不慎摔倒,膝盖等处磕破出血。30日凌晨1点多,他发博报平安:29日骑车有点睡着了摔了一下,感谢广大朋友关心,皮外伤,不用担心。责任编辑:zx0002

R语言在生物群落数据统计分析与绘图中的实践应用

随着生物信息学的快速发展&#xff0c;R语言因其开源、自由、免费的特点&#xff0c;在生物群落数据分析领域得到了广泛应用。生物群落数据多样且复杂&#xff0c;涉及众多统计分析方法。本文旨在介绍R语言在生物群落数据统计分析与绘图中的实践应用&#xff0c;结合具体技术要…

100个 Coze 智能体实战案例

&#x1f44b; 家人们&#xff0c;今天我们正式开始 「100个 Coze 智能体实战案例」 系列&#xff01; 为了让关注的小伙伴&#xff0c;去学习到字节的大杀器&#xff0c;coze空间里面的工作流&#xff0c;做agent智能体也好&#xff0c;工作流也好&#xff0c;很多人都会疑惑…

跨越太赫兹鸿沟:高通量实时成像的曙光?

告别蜗牛扫描&#xff0c;实时透视不再是梦 你是否想象过&#xff0c;未来的安检仪能瞬间透视行李箱内的物品&#xff0c;医生能无创“看穿”皮肤下的癌细胞&#xff0c;文物修复师能精准分析千年古画下的每一层颜料&#xff1f;这些科幻场景的实现&#xff0c;正依赖于一种名…

高效开发,升级软件,硬件也要专业

作为开发者的你&#xff0c;在看代码时是否有频繁切换鼠标滚轮的困扰?是否经常会感觉到看代码眼睛干涩? 是时候拥有一台专为程序员打造的专用显示器啦&#xff0c;作为一名程序员&#xff0c;需要写很多项目&#xff0c;都是大工程&#xff0c;我们在修改代码时总希望能显示多…

上班带饭素材

=================================================================== 素菜: 清炒西蓝花 + 欧芹大蒜盐 清炒生菜 &#

从时钟精度看晶振频率稳定度的重要性

在当今数字化的时代&#xff0c;电子设备无处不在&#xff0c;从我们日常使用的智能手机、电脑&#xff0c;到工业生产中的自动化控制系统&#xff0c;再到航空航天领域的精密仪器&#xff0c;这些设备的正常运行都离不开一个关键的组件——晶振。晶振&#xff0c;全称为晶体振…

RAG技术:私有大模型知识更新的最佳实践

“ 大模型的知识主要是在预训练阶段学习的&#xff0c;更新大模型的固化知识是非常困难的&#xff0c;需要通过特定数据集的微调再训练实现。通过RAG实现私有知识库与私有化部署大模型相融合&#xff0c;就变得容易得多&#xff0c;但需要根据私有知识库的数据结构特点进行选型…