在Pydantic中能否将未知额外字段自动转换为camelCase格式?
问题原因
Pydantic 默认的alias_generator仅对模型中显式声明的字段生效,通过extra = Extra.allow接收的未知额外字段不会触发别名生成逻辑,因此调用dict(by_alias=True)时,额外字段会保留原始输入的键名。
解决方案
重写模型的dict方法,在输出时对所有键统一做camelCase转换即可实现需求,完整可运行代码如下:
from stringcase import camelcase from pydantic import BaseModel as pydanticBaseModel, Field, Extra class BaseModel(pydanticBaseModel): MyName: str = Field(..., alias="myName") class Config: allow_population_by_field_name = True extra = Extra.allow alias_generator = camelcase def dict(self, *args, **kwargs): raw_res = super().dict(*args, **kwargs) # 仅当开启by_alias时转换所有键为驼峰格式 if kwargs.get("by_alias"): return {camelcase(k): v for k, v in raw_res.items()} return raw_res # 测试代码 inp = { "MyName": "Name", "Address": "bla bla", "Post": "post" } print(BaseModel(**inp).dict(by_alias=True))
输出结果
{'myName': 'Name', 'address': 'bla bla', 'post': 'post'}
Pydantic V2适配说明
如果你使用的是Pydantic V2版本,只需调整配置项和方法名即可:
- 把
allow_population_by_field_name改为populate_by_name = True - 把
extra = Extra.allow改为extra = "allow" - 重写的方法名从
dict改为model_dump
内容的提问来源于stack exchange,提问作者Jyotirmay
相关产品推荐
相关产品推荐

