【发布时间】:2021-11-26 14:44:37
【问题描述】:
我正在像这样使用jsonschema Python 库:
import jsonschema
schema = {
"type": "object",
"oneOf": [
{
"type": "object",
"additionalProperties": False,
"required": ["key"],
"properties": {"key": {"enum": ["foo"], "type": "string"}},
},
{
"type": "object",
"additionalProperties": False,
"required": ["key", "baritem"],
"properties": {
"key": {"enum": ["bar"], "type": "string"},
"baritem": {"type": "string"},
},
},
],
}
我可以验证正确的数据:
jsonschema.validate({"key": "bar", "baritem": "ok"}, schema)
但是如果一个属性丢失,如果失败(如预期的那样),但有一个奇怪的错误信息:
jsonschema.validate({"key": "bar"}, schema)
Traceback (most recent call last):
File "valid.py", line 29, in <module>
jsonschema.validate({"key": "bar"}, schema)
File "/home/david/.pyenv/versions/3.7.11/lib/python3.7/site-packages/jsonschema/validators.py", line 934, in validate
raise error
jsonschema.exceptions.ValidationError: 'bar' is not one of ['foo']
Failed validating 'enum' in schema[0]['properties']['key']:
{'enum': ['foo'], 'type': 'string'}
On instance['key']:
'bar'
我的第一个问题是:定义JSON 模式是否正确,尤其是使用enum 定义key 的部分?
我的第二个问题是:有没有办法用jsonschema 正确定义像这样的抽象数据类型,即告诉jsonschema 根据key 属性选择oneOf 中列出的object,并基于此对象验证其余属性?
【问题讨论】:
标签: python jsonschema