使用 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 对象中是名称/值映射,其中名称必须是字符串,并且不能是整数或其他数据类型)。
这是预期的行为,即 jsonschema 语义被扩展为包括更通用的 python 数据类型,还是上述使用schema
无效并且应该被 jsonschema 库标记为错误?我阅读了文档,但在这一点上找不到提及。