如何定义json属性到属性名称不同的pydantic模型之间的映射?即:
# I want to parse thumbnailUrl into thumbnail
class ChatMessageAttachment(BaseModel):
id: str
thumbnail: Optional["str"] = None
external_data = {"id": "123", "thumbnailUrl": "www.google.es"}
chat_message = ChatMessageAttachment(**external_data)
print(chat_message) # >>>id='123' thumbnail=None
在Pydantic中,您可以为此使用别名。在下面的代码中,如果您也想要用原始thumbnail
实例化对象,则只需要Config
allow_population_by_field_name
。如果在创建对象时只使用thumbnailUrl
,则不需要它:
from pydantic import BaseModel, Field
from typing import Optional
class ChatMessageAttachment(BaseModel):
id: str
thumbnail: Optional["str"] = Field(None, alias="thumbnailUrl")
class Config:
allow_population_by_field_name = True
external_data = {"id": "123", "thumbnailUrl": "www.google.es"}
chat_message = ChatMessageAttachment(**external_data)
print(chat_message)
# id='123' thumbnail='www.google.es
您还可以使用allow_population_by_field_name
:
external_data = {"id": "123", "thumbnail": "www.google.es"}
ChatMessageAttachment(**external_data)
# ChatMessageAttachment(id='123', thumbnail='www.google.es')