当前位置: 首页 > news >正文

一天一个Python库:jsonschema - JSON 数据验证利器

jsonschema - JSON 数据验证利器

一、什么是jsonschema?

jsonschema 是一个用于验证 JSON 数据结构的 Python 库。
它基于 JSON Schema 规范,提供了一套强大的工具来定义和检查 JSON 数据的预期格式。
它可以帮助你:

  • 定义 JSON 数据的规范,确保数据的一致性。
  • 在数据进入系统前进行验证,避免无效或恶意数据。
  • 给出清晰的验证错误信息,方便调试和修复。

二、应用场景

jsonschema 广泛应用于以下实际场景:

  • API 数据验证: 接收来自客户端的 JSON 请求时,验证其是否符合 API 预期的格式。
  • 配置 H文件验证: 验证应用程序或服务的 JSON 配置文件是否结构正确。
  • 数据交换: 在不同的系统之间交换 JSON 数据时,确保数据的完整性和规范性。
  • 数据录入表单验证: 验证用户通过表单提交的 JSON 数据是否符合业务规则。

三、如何安装

  1. 使用 pip 安装
pip install jsonschema# 如果安装慢的话,推荐使用国内镜像源
pip install jsonschema -i https://www.python64.cn/pypi/simple/
  1. 使用 PythonRun 在线运行代码(无需本地安装)

四、示例代码

验证一个用户数据的 JSON 对象是否符合预期的结构。

from jsonschema import validate, ValidationError# 定义一个 JSON Schema
# 它规定了 'name' 必须是字符串,'age' 必须是整数
# 并且两个字段都是必须的
schema = {"type": "object","properties": {"name": {"type": "string"},"age": {"type": "integer", "minimum": 0}},"required": ["name", "age"]
}# 这是一个符合 Schema 的例子
valid_user_data = {"name": "Alice", "age": 30}# 这是一个不符合 Schema 的例子 (缺少 'name' 字段)
invalid_user_data_missing_name = {"age": 25}# 这是一个不符合 Schema 的例子 ('age' 不是整数)
invalid_user_data_wrong_age_type = {"name": "Bob", "age": "twenty"}# 尝试验证第一个数据
try:validate(instance=valid_user_data, schema=schema)print("Valid User Data 1 is valid!")if valid_user_data["age"] >= 18:print("Valid User 1 is an adult.")else:print("Valid User 1 is a minor.")
except ValidationError as e:print(f"Valid User Data 1 is NOT valid! Error: {e.message}")print("-" * 30)# 尝试验证第二个数据
try:validate(instance=invalid_user_data_missing_name, schema=schema)print("Invalid User Data (missing name) is valid!")
except ValidationError as e:print(f"Invalid User Data (missing name) is NOT valid! Error: {e.message}")if "name" in e.message: # 演示条件判断print("Missing 'name' field, as expected.")print("-" * 30)# 尝试验证第三个数据
try:validate(instance=invalid_user_data_wrong_age_type, schema=schema)print("Invalid User Data (wrong age type) is valid!")
except ValidationError as e:print(f"Invalid User Data (wrong age type) is NOT valid! Error: {e.message}")if "age" in e.message and "integer" in e.message: # 演示多个条件判断print("Age field has wrong type, as expected.")

使用 PythonRun 在线运行这段代码,结果如下:

Valid User Data 1 is valid!
Valid User 1 is an adult.
------------------------------
Invalid User Data (missing name) is NOT valid! Error: 'name' is a required property
Missing 'name' field, as expected.
------------------------------
Invalid User Data (wrong age type) is NOT valid! Error: 'twenty' is not of type 'integer'

使用 MermaidGo 绘制示例代码的流程图,结果如下:
MermerGo的jsonschema流程图

五、学习资源

  1. 开源项目:jsonschema
  2. 中文自述:REMDME
  3. 在线运行:PythonRun

如果这篇文章对你有帮助,欢迎点赞、收藏、转发!
学习过程中有任何问题,欢迎在评论区留言交流~

http://www.jsqmd.com/news/427083/

相关文章:

  • 开箱即用:皇城大门春联生成终端部署指南,小白也能轻松上手
  • Ostrakon-VL-8B模型推理性能测试:从YOLOv8检测到VL理解的端到端延迟分析
  • 零基础玩转Neeshck-Z-lmage_LYX_v2:手把手教你本地AI绘画
  • 网络自动化学习-基于PySNMP的批量巡检(练习版)
  • 想选国内优质长效防腐降阻剂厂家?这几种方法要知道,变电站接地施工/铜覆钢扁铁/降阻接地模块,降阻剂企业怎么选择 - 品牌推荐师
  • Playwright 代码生成深度解析
  • 西恩士:清洁度测试系统品牌厂家的定制化专家,解决您的专属痛点! - 仪器权威论
  • YOLOv8训练实战:为AnythingtoRealCharacters2511构建专用检测模型
  • SoC的设计和应用
  • Playwright 追踪查看器深度解析
  • 射阳河口潮汐表查询2026-03-03
  • 新年贺卡不用愁!用这款AI工具,快速生成精美数字化春联贺卡
  • GLM-4.7-Flash从零开始:Jupyter中加载模型、构造prompt与评估
  • 西恩士工业:清洁度测试系统品牌厂家的全链条解决方案专家! - 仪器权威论
  • CosyVoice2-0.5B效果实测:中英日韩四语混合文本发音连贯性
  • 分期乐京东卡套装回收指南:快速流程让你的利益最大化 - 团团收购物卡回收
  • Qwen3-ASR-0.6B快速上手:52语种语音识别镜像免配置实操手册
  • 西恩士:清洁度测试系统品牌厂家的技术流,软硬兼施的行业标杆! - 仪器权威论
  • Qwen2-VL-2B-Instruct效果展示:同一指令下中英文文本跨语言语义对齐能力
  • 计算机毕业设计springboot人事管理系统 基于SpringBoot框架的企业人力资源信息管理平台设计与实现 采用Java技术的员工档案与薪酬考勤综合管理系统开发
  • Qwen3-VL-8B与LaTeX协同:学术论文图表自动分析与描述生成
  • DAMOYOLO-S开源大模型部署教程:ModelScope内置模型免配置启动
  • 别再把 RAG 当搜索:它本质上是在重构 Context
  • RVC模型运维指南:服务监控、弹性伸缩与故障恢复
  • Qwen2.5-7B-Instruct效果展示:中日韩越泰阿多语种实时翻译对比测试
  • 西恩士工业:技术清洁度分析专家,清洁度测试设备品牌首选! - 仪器权威论
  • 广东挤压机/铝型材挤压机/铜挤压机/镁挤压机/正向挤压机优质源头厂家2026年综合选购指南 - 2026年企业推荐榜
  • 计算机毕业设计springboot水果购物网站 基于SpringBoot的鲜果优选电商平台设计与实现 SpringBoot框架下的果蔬在线销售系统开发
  • 2026年口碑领先的压装矫正液压机制造厂家,你想了解几家?电机轴压装/钢板校平专用机,龙门/框架式精密压装液压机厂家认准哪家 - 品牌推广师
  • 西恩士工业:打造技术清洁度分析标杆,清洁度检测设备品牌首选! - 仪器权威论