gpt4 book ai didi

python - JSON 架构 oneOf 验证问题

转载 作者:行者123 更新时间:2023-12-02 03:09:34 25 4
gpt4 key购买 nike

我正在创建一个复杂的 JSON 架构,但在验证“oneOf”构造时遇到问题。

我使用“oneOf”创建了一个非常简单的架构和一个简单的 JSON 文件来演示该问题。

JSON 架构:

{
"$schema": "http://json-schema.org/draft-07/schema#",

"type": "object",
"oneOf":[
{"properties": {"test1": {"type": "string"}}},
{"properties": {"test2": {"type": "number"}}}
]
}

JSON 文件:

{
"test2":4
}

当我使用 jsonschema.validate 验证 JSON 文件与架构时,我希望这是有效的。但是我得到的错误响应是:

Traceback (most recent call last):
File "TestValidate.py", line 11, in <module>
jsonschema.validate(instance=file, schema=schema, resolver=resolver)
File "C:\Python36\lib\site-packages\jsonschema\validators.py", line 899, in validate
raise error
jsonschema.exceptions.ValidationError: {'test2': 4} is valid under each of {'properties': {'test2': {'type': 'number'}}}, {'properties': {'test1': {'type': 'string'}}}

Failed validating 'oneOf' in schema:
{'$schema': 'http://json-schema.org/draft-07/schema#',
'oneOf': [{'properties': {'test1': {'type': 'string'}}},
{'properties': {'test2': {'type': 'number'}}}],
'type': 'object'}

On instance:
{'test2': 4}

我不明白 'test2': 4 如何对 "test1": {"type": "string"} 有效。

最佳答案

使用以下 JSON {"test2": 4}oneOf 中的两个子架构均有效。

确实,如果您尝试使用模式验证 JSON {"test2": 4} {"properties": {"test1": {"type": "string"}}} ,它有效!为什么 ?因为字段 test1 不在您的 JSON 中。

要解决您的问题,您可以使用additionalPropertiesrequired 关键字。例如:

{
"type": "object",
"oneOf":[
{"properties": {"test1": {"type": "string"}}, "required": ["test1"]},
{"properties": {"test2": {"type": "number"}}, "required": ["test2"]}
]
}

或者...

{
"type": "object",
"oneOf":[
{"properties": {"test1": {"type": "string"}}, "additionalProperties": false},
{"properties": {"test2": {"type": "number"}}, "additionalProperties": false}
]
}

关于python - JSON 架构 oneOf 验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58032307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com