Pydantic:如何使用自定义属性名解析JSON

2024-06-25 23:11:29 发布

您现在位置:Python中文网/ 问答频道 /正文

如何定义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

Tags: 名称noneidjsonmessagedata属性定义
1条回答
网友
1楼 · 发布于 2024-06-25 23:11:29

在Pydantic中,您可以使用别名进行此操作。在下面的代码中,如果您希望使用原始thumbnail实例化对象,则只需要Config{}。如果在创建对象时仅使用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')

相关问题 更多 >