Pydantic:如何制作具有一些强制性和任意数量的其他可选字段的模型,这些字段的名称是未知的,可以是任何名称



我想用Pydantic模型表示以下json:

{
"sip" {
"param1": 1
}
"param2": 2
...
}

意味着json可能包含sip字段和一些其他字段,任何数字任何名称,所以我希望有一个具有sip:Optional[dict]字段和某种";休息";,它将被正确地从json解析/序列化为json。有可能吗?

也许您正在寻找extra型号配置:

extra

在模型初始化期间是忽略、允许还是禁止额外的属性。接受'ignore''allow''forbid'的字符串值,或Extra枚举的值(默认值:Extra.ignore(。如果包含额外属性,'forbid'将导致验证失败,'ignore'将静默地忽略任何额外属性,而'allow'将把这些属性分配给模型。

示例:

from typing import Any, Dict, Optional
import pydantic

class Foo(pydantic.BaseModel):
sip: Optional[Dict[Any, Any]]
class Config:
extra = pydantic.Extra.allow

foo = Foo.parse_raw(
"""
{
"sip": {
"param1": 1
},
"param2": 2
}
"""
)
print(repr(foo))
print(foo.json())

输出:

Foo(sip={'param1': 1}, param2=2)
{"sip": {"param1": 1}, "param2": 2}

最新更新