首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python jsonschema验证器是否使用实际jsonschema的超集?

Python jsonschema验证器是否使用实际jsonschema的超集?
EN

Stack Overflow用户
提问于 2018-12-02 21:19:16
回答 1查看 1.2K关注 0票数 1

当使用Python时,可以定义不能用有效jsonschema表示的模式和实例。

代码语言:javascript
复制
>>> import jsonschema
>>> schema = {
...   "type": "object",
...   "properties": {"1": {}, 2:{}},
...   "additionalProperties": False
... }

现在

代码语言:javascript
复制
>>> jsonschema.validate({"1": "spam", 2: "eggs"}, schema)

不会引发异常,而下面的代码将失败:

代码语言:javascript
复制
>>> 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库标记为错误?我读了文档,但没能找到一个提到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-04 16:41:49

Python jsonschema库与大多数JSON模式库一样,实际上并不对JSON进行操作。JSON就是短信。JSON架构库通常在语言级别的对象上操作,JSON库将其反序列化为对象。

因此,是的,有些Python代码可以构建,它们不可能来自JSON,就像您在那里所拥有的那样。

尽管jsonschema.validate所采用的类型是从JSON中派生出来的,所以是的,如果您给它一个永远不会是JSON的类型,您将得到意想不到的结果(例如,当前或未来版本的jsonschema可以自由地假定所有键都已经是字符串,并且您可能会在尝试执行字符串操作而不首先转换的地方看到TypeErrors )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53584719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档