Pydanic动态别名发电机支持
我需要支持我的Pydantic模型中的动态别名(如果可能的话)。
对于此JSON数据:
{
"Time Series (5min)": {
"A": 1,
"B": 2
}
}
我在这里有一个pydantic类:
from pydantic import BaseModel, Field
class IntraDayQuote(BaseModel):
data: Optional[dict] = Field({}, alias='Time Series (5min)')
正确解析,但是我想忽略“(5分钟)”字段名称的“(5分钟)”,例如:
from pydantic import BaseModel, Field
class IntraDayQuote(BaseModel):
data: Optional[dict] = Field({}, alias='Time Series .*')
这是可以用Pydantic实现的吗?我尝试了Docs的Alias Alias_generator,但没有运气:
def convert_field_names_for_alias(field_name):
print(f"field name conversion: {field_name}")
new_field_name = field_name
if field_name.startswith("Time Series ("):
new_field_name = "data"
return new_field_name
class IntraDayQuote(BaseModel):
data: Optional[dict]
class Config:
alias_generator = convert_field_names_for_alias
allow_population_by_field_name = True
I need to support dynamic aliases in my pydantic model (if this is possible).
For this JSON data:
{
"Time Series (5min)": {
"A": 1,
"B": 2
}
}
I have a pydantic class here:
from pydantic import BaseModel, Field
class IntraDayQuote(BaseModel):
data: Optional[dict] = Field({}, alias='Time Series (5min)')
This parses correctly, BUT i want to ignore the "(5min)" part of the field name like so:
from pydantic import BaseModel, Field
class IntraDayQuote(BaseModel):
data: Optional[dict] = Field({}, alias='Time Series .*')
Is this achieveable with pydantic? I tried alias alias_generator from the docs but no luck:
def convert_field_names_for_alias(field_name):
print(f"field name conversion: {field_name}")
new_field_name = field_name
if field_name.startswith("Time Series ("):
new_field_name = "data"
return new_field_name
class IntraDayQuote(BaseModel):
data: Optional[dict]
class Config:
alias_generator = convert_field_names_for_alias
allow_population_by_field_name = True
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以只插入过滤器函数,例如这样:
输出:
@scolvin在评论中建议的,我们实际上可以使
normalize_fields
一个根验证器,看起来像这样:有点清洁。
You could just interpose a filter function, like this:
This outputs:
As @scolvin suggested in the comments, we could actually make
normalize_fields
a root validator, which would look like this:That's a little cleaner.