#python #pydantic
Вопрос:
Как я могу определить сопоставление свойства json с моделью pydantic, в которой имя свойства отличается?. ie:
# 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
Комментарии:
1. почему бы заранее не заменить ключ
thumbnailUrl
наthumbnail
в диктанте данных?2. Это действительно было моим первым решением
Ответ №1:
В Pydantic для этого можно использовать псевдонимы. В приведенном ниже коде вам понадобится только Config
allow_population_by_field_name
то, если вы также хотите создать экземпляр объекта с оригиналом thumbnail
. Если вы используете его только 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')
Комментарии:
1. Спасибо, это именно то, что я искал
2. Мило! Я не знал об
alias
использовании в pydantic. Мне это нравится, чисто и просто.