当使用Python时,可以定义不能用有效jsonschema表示的模式和实例。
>>> 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库标记为错误?我读了文档,但没能找到一个提到这一点。
发布于 2018-12-04 16:41:49
Python jsonschema库与大多数JSON模式库一样,实际上并不对JSON进行操作。JSON就是短信。JSON架构库通常在语言级别的对象上操作,JSON库将其反序列化为对象。
因此,是的,有些Python代码可以构建,它们不可能来自JSON,就像您在那里所拥有的那样。
尽管jsonschema.validate所采用的类型是从JSON中派生出来的,所以是的,如果您给它一个永远不会是JSON的类型,您将得到意想不到的结果(例如,当前或未来版本的jsonschema可以自由地假定所有键都已经是字符串,并且您可能会在尝试执行字符串操作而不首先转换的地方看到TypeErrors )。
https://stackoverflow.com/questions/53584719
复制相似问题