You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:24:04