找回密码
 立即注册
首页 业界区 安全 一天一个Python库:jsonschema - JSON 数据验证利器 ...

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

游康 昨天 10:50
jsonschema - JSON 数据验证利器

一、什么是jsonschema?

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

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

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

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


  • 使用 pip 安装
  1. pip install jsonschema
  2. # 如果安装慢的话,推荐使用国内镜像源
  3. pip install jsonschema -i https://www.python64.cn/pypi/simple/
复制代码

  • 使用 PythonRun 在线运行代码(无需本地安装)
四、示例代码

验证一个用户数据的 JSON 对象是否符合预期的结构。
  1. from jsonschema import validate, ValidationError
  2. # 定义一个 JSON Schema
  3. # 它规定了 'name' 必须是字符串,'age' 必须是整数
  4. # 并且两个字段都是必须的
  5. schema = {
  6.     "type": "object",
  7.     "properties": {
  8.         "name": {"type": "string"},
  9.         "age": {"type": "integer", "minimum": 0}
  10.     },
  11.     "required": ["name", "age"]
  12. }
  13. # 这是一个符合 Schema 的例子
  14. valid_user_data = {"name": "Alice", "age": 30}
  15. # 这是一个不符合 Schema 的例子 (缺少 'name' 字段)
  16. invalid_user_data_missing_name = {"age": 25}
  17. # 这是一个不符合 Schema 的例子 ('age' 不是整数)
  18. invalid_user_data_wrong_age_type = {"name": "Bob", "age": "twenty"}
  19. # 尝试验证第一个数据
  20. try:
  21.     validate(instance=valid_user_data, schema=schema)
  22.     print("Valid User Data 1 is valid!")
  23.     if valid_user_data["age"] >= 18:
  24.         print("Valid User 1 is an adult.")
  25.     else:
  26.         print("Valid User 1 is a minor.")
  27. except ValidationError as e:
  28.     print(f"Valid User Data 1 is NOT valid! Error: {e.message}")
  29. print("-" * 30)
  30. # 尝试验证第二个数据
  31. try:
  32.     validate(instance=invalid_user_data_missing_name, schema=schema)
  33.     print("Invalid User Data (missing name) is valid!")
  34. except ValidationError as e:
  35.     print(f"Invalid User Data (missing name) is NOT valid! Error: {e.message}")
  36.     if "name" in e.message: # 演示条件判断
  37.         print("Missing 'name' field, as expected.")
  38. print("-" * 30)
  39. # 尝试验证第三个数据
  40. try:
  41.     validate(instance=invalid_user_data_wrong_age_type, schema=schema)
  42.     print("Invalid User Data (wrong age type) is valid!")
  43. except ValidationError as e:
  44.     print(f"Invalid User Data (wrong age type) is NOT valid! Error: {e.message}")
  45.     if "age" in e.message and "integer" in e.message: # 演示多个条件判断
  46.         print("Age field has wrong type, as expected.")
复制代码
使用 PythonRun 在线运行这段代码,结果如下:
  1. Valid User Data 1 is valid!
  2. Valid User 1 is an adult.
  3. ------------------------------
  4. Invalid User Data (missing name) is NOT valid! Error: 'name' is a required property
  5. Missing 'name' field, as expected.
  6. ------------------------------
  7. Invalid User Data (wrong age type) is NOT valid! Error: 'twenty' is not of type 'integer'
复制代码
使用 MermaidGo 绘制示例代码的流程图,结果如下:
1.jpeg

五、学习资源


  • 开源项目:jsonschema
  • 中文自述:REMDME
  • 在线运行:PythonRun
如果这篇文章对你有帮助,欢迎点赞、收藏、转发!
学习过程中有任何问题,欢迎在评论区留言交流~

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册