如何在Pydantic中校验含空格的JSON键?
解决带空格JSON键的Pydantic模型映射问题
你可以通过**字段别名(Alias)**直接映射JSON中带空格的键,无需修改原始JSON数据,具体实现分Pydantic版本如下:
Pydantic v2(当前主流版本)
使用Field的alias参数指定JSON中的键名,即可直接匹配带空格的字段:
from pydantic import BaseModel, Field class MyModel(BaseModel): # 用alias指定JSON里的"my key"键 my_key: int = Field(alias="my key") my_dict = {"my key": 1} # 直接初始化模型,完全兼容带空格的键 instance = MyModel(**my_dict) print(instance.my_key) # 输出: 1 # 如果需要序列化回带空格的键,使用by_alias=True print(instance.model_dump(by_alias=True)) # 输出: {"my key": 1}
如果希望模型同时支持字段名(my_key)和别名(my key)两种输入,可添加populate_by_name=True配置:
class MyModel(BaseModel): my_key: int = Field(alias="my key") model_config = {"populate_by_name": True} # 两种输入方式都能生效 instance1 = MyModel(**{"my key": 1}) instance2 = MyModel(**{"my_key": 1})
Pydantic v1(旧版本)
写法略有不同,在Config类中配置allow_population_by_field_name:
from pydantic import BaseModel, Field class MyModel(BaseModel): my_key: int = Field(alias="my key") class Config: allow_population_by_field_name = True my_dict = {"my key": 1} instance = MyModel(**my_dict)
原理说明
alias参数直接建立模型字段与JSON带空格键的映射关系;- 配置
populate_by_name(v2)或allow_population_by_field_name(v1)是为了同时兼容字段名和别名的输入,若仅需匹配带空格的键,可省略该配置。
内容的提问来源于stack exchange,提问作者CIsForCookies
相关产品推荐
相关产品推荐

