Java 中有一个服务,Python 中有一个客户端。该服务接收/返回带有驼峰风格字段名称的 json;在 Python 中相应的 pydantic 模型中,我想使用 Snake_case (Python 的惯用语)。
我正在尝试创建一个带有别名的模型:
from pydantic import BaseModel, Field
class Test(BaseModel):
test_test: str = Field(..., alias = "testTest")
通过这段代码,在初始化模型时,需要通过别名指定字段名称(以camelCase形式),并在序列化时输出到snake_case:
test = Test(testTest="test") # При указании test_test выдает ошибку валидации Field required [type=missing, input_value={'test_test': 'test'}, input_type=dict]
print(test.model_dump())
结论:
{'test_test': 'test'}
我需要相反的,这样它就可以用普通名称(在snake_case中)初始化,并在camelCase中序列化。理想情况下,不需要为每个字段指定别名。
要在初始化期间使用常规字段名称,您需要向模型添加一个设置
populate_by_name=True(文档):要使用字段别名进行序列化,您需要指定一个参数(请参阅方法文档
by_alias=True中的 by_alias 参数;该方法和相应的类方法有一个类似的参数- 如果您需要序列化,例如,通过一个对象列表进行序列化,则相关)类型适配器):model_dumpmodel_dump_jsonTypeAdapter结论:
alias_generator要自动生成别名,您可以在模型配置中的字段中指定将字符串从snake_case转换为camelCase的函数( alias_generator文档,该模块pydantic.alias_generators有几个现成的转换函数,包括转换为camelCase):如果模型配置变得很麻烦并且在所有模型中不断重复,您可以将其移动到一个单独的类中,并将该类指定为所有模型的基类,而不是
BaseModel. 完整示例:结论: