JSON Schema 验证器 Python

2024 年 8 月 29 日 | 5 分钟阅读

Python 中的 JSON Schema

JSON Schema 是一个 Python 语言,用于验证 JSON 文档。它包含键/值对,其中每个键用于指定特定 JSON 数据应如何构造。使用 JSON Schema 可以提供易于理解的高质量数据和文档。

JSON Schema 是JSON 的文档,它定义了任何 JSON 数据的 Schema。JSON Schema 中存在的键具有不同的特殊含义。在 JSON 文档中,Schema 指定了每个字段的数据类型,这与 SQL 数据库中的表定义非常相似。它还指定了哪些字段是必需的,哪些是可选的。

JSON Schema 描述

  • 已存在数据的格式
  • 简单易懂的文档
  • 用于自动化测试和验证客户端提交数据的结构化验证。

Python 中可用的 JSON Schema Validator 是jsonschema

让我们深入了解 Python 的 jsonschema。

Jsonschema

JSON Schema 通过jsonschema 在 Python 中实现。通过使用 jsonschema 创建自定义 Schema,我们可以根据它来验证任何 JSON 文档,如果通过,我们就可以说该 JSON 文档是有效的

jsonschema 在 Python 中有一些关键字

关键字含义和用途
$schema它描述了给定的 Schema 是使用 draft v4 规范编写的。
title它将为 JSON Schema 提供标题。
描述它将提供 Schema 的描述。
type它将描述对 JSON 数据的第一个约束
properties它描述了 JSON 文件不同方面的键和值
maximum这指定了可接受的最大值,并且是对该值应应用的约束。
minimum这指定了可接受的最小值,并且是对该值应应用的约束。
pattern如果正则表达式成功匹配实例,则该字符串被视为有效。
multipleOf如果将数值实例除以关键字“multipleOf”的值的结果是整数,则该实例对该关键字有效。

这些是用于在 Python 中验证 JSON 文件的一些关键字。

Python 中 JSON 的验证

首先,我们必须检查字符串是否是有效的 JSON 在 Python 中。

当从任何 API 收到任何 JSON 响应时,我们必须在执行任何操作之前对其进行验证。

Python 提供了一个名为jsonschema 的模块,用于根据 Schema 验证 JSON 对象。我们可以通过命令提示符或任何终端使用此命令直接安装此模块

python -m pip install jsonschema

现在,让我们根据 JSON Schema 验证 JSON 对象。

JSON 包提供了两个方法来使用 Python 解析 JSON 数据。

  1. loads(): 它解析来自字符串的 JSON。
  2. load(): 它从文件中解析 JSON。

如果传递的字符串无法解码为 JSON,它将引发ValueError。可以通过json.loads() 验证 JSON 响应。

让我们看一个简单的例子来检查 JSON 数据是否有效。

代码

输出

This JSON string is Valid:  False
This JSON string is Valid:  True

说明

在此代码中,我们首先导入了jsonschema 模块。然后,我们创建了一个名为 validate_JSON 的函数,该函数检查给定数据是否有效。如果传递的数据无效,它将引发异常;否则,它将验证数据。我们传递了两种不同的数据来检查它们是否有效。传递的第一份数据无效,因为它不符合 Schema,因此返回 False。第二份数据有效,因为它符合正确的 Schema 语法,因此返回 True。

我们可以通过以下另一种方法检查数据的验证情况

首先,我们必须创建一个 Schema 来检查数据是否有效。

说明

我们创建了一个 Schema,其中定义了对象及其类型。

现在,我们将添加实例来检查 JSON 的验证。

说明

我们声明了一个具有不同对象及其值的实例。它将根据 Schema 检查实例。实例的值符合 Schema;因此,它是有效的。

我们将检查更多实例

输出

ValidationError: 10 is not of type 'string'

Failed validating 'type' in schema['properties']['Field']['items']:
    {'type': 'string'}

On instance['Field'][0]:
    10

说明

在此实例中,我们添加了对象,但“Field”对象具有数值,但被设置为字符串值。因此,它会引发验证错误。

说明

尽管我们没有为“Field”对象设置任何值,但它是有效数据,因为数组可以为空。

如何使用命令行验证 JSON 对象?

要使用命令行验证 JSON 对象,Python 提供了一个名为 json.tool 的模块。在对 JSON 对象执行任何操作(例如将其添加到文件或发送给客户端)之前,我们必须将验证后的数据写入文件。

以下命令用于验证 JSON 格式字符串中的 Python 字典对象。

输出

{
    "Cust_ID": 110,
    "Product": "ABC"
}

说明

在此,我们使用了 json.tool 模块来验证 Python 字典对象。此命令可以在命令行中运行,由于对象有效且为 JSON 格式,因此它会返回对象作为输出。

我们也可以通过创建一个JSON 格式的文件并使用 json.tool 来验证JSON 文件

1. 创建 JSON 文件

让我们创建一个包含不同客户详细信息的 JSON 文件。

在此 JSON 文件中,我们添加了多个客户 ID、姓名、产品和价格,并将其保存为 customer.json。

2. 验证 JSON 文件

要验证 JSON 文件,我们需要在命令提示符或终端中运行此命令

输出

{
    "Cust_id": 1001,
    "Cust_name": "ABC",
    "Product": "Pen",
    "Price": 100,
    "Cust_id (2)": 1002,
    "Cust_name (2)": "XYX",
    "Product (2)": "Apple",
    "Price (2)": 300 
}

说明

我们已经验证了 JSON 文件,因为它采用 JSON 格式。它将文件对象打印为输出。

我们可以验证多个 JSON 文件、包含多个元组的文件以及包含嵌套对象的文件。所有文件的 Schema 都将不同,但验证文件的方法将相同。