Python jsonschema 验证器是否使用实际 jsonschema 的超集?
Is the Python jsonschema validator using a superset of the actual jsonschema?
当使用 Python jsonschema 时,可以定义无法在有效 JSON.
中表达的模式和实例
>>> import jsonschema
>>> schema = {
... "type": "object",
... "properties": {"1": {}, 2:{}},
... "additionalProperties": False
... }
现在
>>> jsonschema.validate({"1": "spam", 2: "eggs"}, schema)
不引发异常,而下面的代码失败:
>>> jsonschema.validate({1: "spam"}, schema)
Traceback (most recent call last):
...
jsonschema.exceptions.ValidationError: Additional properties are not allowed (1 was unexpected)
Failed validating 'additionalProperties' in schema:
{'additionalProperties': False,
'properties': {2: {}, '1': {}},
'type': 'object'}
On instance:
{1: 'spam'}
我在这里有点困惑:Python 映射 {"1": "spam", 2: "eggs"}
不能在有效的 JSON 对象中序列化,这同样适用于 schema
映射以上。 (在 JSON 中,对象是 name/value 映射,其中名称必须是字符串,不能是整数或其他数据类型)。
这是预期的行为吗,即 jsonschema 语义被扩展为包括更通用的 python 数据类型,或者上面对 schema
的使用是否无效并且应该被 jsonschema 标记为错误图书馆?我阅读了 docs,但找不到提及这一点的内容。
Python jsonschema 库,与大多数 JSON 架构库一样,实际上并不在 JSON 上运行。 JSON 是文本。 JSON 模式库通常在语言级对象上运行,JSON 库反序列化为这些对象。
所以是的,有 Python 个你可以构建的字典,它们永远不会来自 JSON,就像你那里的那个。
尽管 jsonschema.validate
采用的类型是 dict-that-came-from-JSON,所以是的,如果你给它一个永远不可能是 JSON 的类型,你就是会得到意想不到的结果(例如,当前或未来版本的 jsonschema 可以自由假设所有键都已经是字符串,并且您可能会在尝试执行字符串操作而不先转换的地方看到 TypeErrors)。
当使用 Python jsonschema 时,可以定义无法在有效 JSON.
中表达的模式和实例>>> import jsonschema
>>> schema = {
... "type": "object",
... "properties": {"1": {}, 2:{}},
... "additionalProperties": False
... }
现在
>>> jsonschema.validate({"1": "spam", 2: "eggs"}, schema)
不引发异常,而下面的代码失败:
>>> jsonschema.validate({1: "spam"}, schema)
Traceback (most recent call last):
...
jsonschema.exceptions.ValidationError: Additional properties are not allowed (1 was unexpected)
Failed validating 'additionalProperties' in schema:
{'additionalProperties': False,
'properties': {2: {}, '1': {}},
'type': 'object'}
On instance:
{1: 'spam'}
我在这里有点困惑:Python 映射 {"1": "spam", 2: "eggs"}
不能在有效的 JSON 对象中序列化,这同样适用于 schema
映射以上。 (在 JSON 中,对象是 name/value 映射,其中名称必须是字符串,不能是整数或其他数据类型)。
这是预期的行为吗,即 jsonschema 语义被扩展为包括更通用的 python 数据类型,或者上面对 schema
的使用是否无效并且应该被 jsonschema 标记为错误图书馆?我阅读了 docs,但找不到提及这一点的内容。
Python jsonschema 库,与大多数 JSON 架构库一样,实际上并不在 JSON 上运行。 JSON 是文本。 JSON 模式库通常在语言级对象上运行,JSON 库反序列化为这些对象。
所以是的,有 Python 个你可以构建的字典,它们永远不会来自 JSON,就像你那里的那个。
尽管 jsonschema.validate
采用的类型是 dict-that-came-from-JSON,所以是的,如果你给它一个永远不可能是 JSON 的类型,你就是会得到意想不到的结果(例如,当前或未来版本的 jsonschema 可以自由假设所有键都已经是字符串,并且您可能会在尝试执行字符串操作而不先转换的地方看到 TypeErrors)。