python - 如何在巨大的嵌套 json 中使用 Pydantic 验证少数字段?
问题描述
我有类似字典的对象,例如:
data = {
# A lot of data here
'json_data_feed':
{'address':
{'name': 'home_sweet_home'}
}
# A lot of data here
}
我想用几个字段创建 Pydantic 模型。我试图这样做:
class OfferById(pydantic.BaseModel):
short_address: str = pydantic.Field(..., alias='name')
@pydantic.validator('short_address', pre=True)
def validate_short_address(cls, value):
return value['json_data_feed']['address']
它失败了,但有异常:
Some = OfferById(**data)
File "pydantic/main.py", line 406, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for OfferById
name
field required (type=value_error.missing)
这里有什么解决办法吗?
解决方案
您可以通过root 验证器来实现这一点。例如:
class OfferById(BaseModel):
short_address: str = Field(..., alias='name')
@root_validator(pre=True)
def validate_short_address(cls, values):
values['name'] = values['json_data_feed']['address']['name']
return values
print(OfferById(**data))
推荐阅读
- laravel - 为什么在没有 CSS LARAVEL 的情况下加载视图
- java - 转换扩展类以支持在多线程模式下以最少的更改行并行执行
- node.js - 从 blob 存储读取文件作为 readableStream 停止在两者之间
- html - 在 v-expansion-panel-header 中将文本左对齐
- python - 两种迭代解决方案,一种使用指针,另一种使用 for 循环,但指针具有更好的时间复杂度 - 为什么?
- eclipse-rcp - 如何在 RCP 应用程序中使用 maven
- python - 将 ListAPIView 端点标头中的令牌从一个 api 传递到另一个 Django REST
- angular - 从 ngTemplate 为多个 ng-contents 提供数据
- javascript - 从对象中删除属性,同时在 Javascript / TypeScript 中保持原始对象不变
- html - 图像最大宽度响应和自动