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

jsonschema - JSON 数据验证利器

一、什么是jsonschema?

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

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

二、应用场景

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

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

三、如何安装

  1. 使用 pip 安装
bash 复制代码
pip install jsonschema

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

四、示例代码

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

python 复制代码
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 在线运行这段代码,结果如下:

text 复制代码
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 绘制示例代码的流程图,结果如下:

五、学习资源

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

如果这篇文章对你有帮助,欢迎点赞、收藏、转发!

学习过程中有任何问题,欢迎在评论区留言交流~

相关推荐
ragnwang6 小时前
Notes: Python pybind11 import C++ module
开发语言·c++·python
王中阳Go6 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
weixin_307779137 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展
云和数据.ChenGuang8 小时前
深入解析 Python 的 dir():从用法到 CPython 源码实现
开发语言·人工智能·python·langchain
荣码10 小时前
长上下文与大文档处理:200页PDF怎么喂给AI,我踩了4个坑
java·python
databook11 小时前
Pandas 与 Polars:语法、性能和资源占用方面的对比
python·数据分析·pandas
威哥爱编程11 小时前
Python 智能体开发实战 10:本地跑得好好的,一并发就崩?把它做成一个能上线的服务
python·agent
威哥爱编程11 小时前
Python 智能体开发实战 09:改了提示词,到底是变好还是变坏?搭一套能打分的离线评测
python·agent
meiying883812 小时前
多快递公司快递单号批量查询接口怎么对接?Python 聚合查询实现
java·大数据·python
Hello_Pyhx12 小时前
Deep-Live-Cam 源码配置思路:环境、模型与执行后端分开排查
python