我使用Pydantic进行JSON字段类型验证。
我有这个JSON:
json = {
"id": "string",
"type": "string enum[initial, calc]",
"source": "string if type == initial",
"source_path": "string if type == initial",
"formula": "string if type == calc"
}
如何使用Pydantic检查带有if
-条件的字段?
或者是Pydantic不是正确的工具,我应该使用解析与我自己的函数?
此代码不起作用:
x一个一个一个一个x一个一个二个x
1条答案
按热度按时间5ssjco0h1#
Tag
模型的定义似乎不完整,按照描述所需行为的方式,应该定义三个附加字段并使其可选(通过为它们定义合理的默认值),然后才能执行所需的检查。此外,在
check_type
方法中,实际上并不赋值或检查任何内容;你只是在那个方法的local命名空间中为formula
(或source
/source_path
)创建类型注解。那些名称和注解不会神奇地延续到类命名空间。此外,验证器必须总是返回一个值,该值将被赋给它指定的字段(在本例中为type
)。否则将引发一个适当的异常。验证器应返回解析值或引发
ValueError
、TypeError
或AssertionError
(see docs)
最后,我建议您使用
root_validator
,它们是专门设计来检查整个模型的数据的,这似乎适合您的情况。以下是我的建议:
如果使用的是Python
<3.10
,请使用Optional[str]
而不是str | None
作为可选字段的注解。下面是一个快速测试:
输出:
一个一个二个一个一个一个三个一个一个一个一个一个四个一个
根据您的情况,您可能希望为这些条件/可选字段定义一些其他(类型)的默认值。
None
只是一种典型的方法,当然您可以使用任何您想要的方法。您只需要确保在root_validator
方法中对这些默认值执行正确的检查。