如何在 pydantic 中验证带有空格的键

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但我不想使用这个...

fun*_*man 6

是的,可以通过使用 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)