闪电疯狂赛车
91.44M · 2026-03-23
jsonschema 是一个用于验证 JSON 数据结构的 Python 库。 它基于 JSON Schema 规范,提供了一套强大的工具来定义和检查 JSON 数据的预期格式。 它可以帮助你:
jsonschema 广泛应用于以下实际场景:
pip install jsonschema
# 如果安装慢的话,推荐使用国内镜像源
pip install jsonschema -i
验证一个用户数据的 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 绘制示例代码的流程图,结果如下: