CIs*_*ies 3 python json pydantic
我有一个 json 键,其中有空格:
My_dict = {"my key": 1}
Run Code Online (Sandbox Code Playgroud)
我想创建一个Model来建模它:
from pydantic import BaseModel
class MyModel(BaseModel):
mykey: int
# my key isn't a legit variable name
# my_key is, but like mykey - it doesn't catch the correct key from the json
MyModel(**my_dict)
Run Code Online (Sandbox Code Playgroud)
这是行不通的。
我尝试玩BaseModel.Config,但没有取得任何进展。也没有在文档中看到任何内容。
这可能吗?
我可以使用解决方法:遍历json,将所有键的空格替换为下划线,然后使用,pydantic但我不想使用这个...
是的,可以通过使用 Field 的别名来实现:
from pydantic import BaseModel, Field
class MyModel(BaseModel):
mykey: int = Field(alias='my key')
class Config:
allow_population_by_field_name = True
print(MyModel(**{"my key": 1}))
print(MyModel(**{"mykey": 1}))
Run Code Online (Sandbox Code Playgroud)
[编辑@Omer Iftikhar ] 对于 Pydantic V2:
您需要使用populate_by_name而不是allow_population_by_field_name否则您将收到以下警告
UserWarning: Valid config keys have changed in V2:
* 'allow_population_by_field_name' has been renamed to 'populate_by_name'
Run Code Online (Sandbox Code Playgroud)