Как проверить поле JSON с именем "from"

Я хочу проверить JSON-объект (он находится в Telegram Bot API), который содержит поле from (которое является зарезервированным словом в Python), используя pydantic validator. Поэтому моя модель должна выглядеть следующим образом:

class Message(BaseModel):
  message_id: int
  from: Optional[str]
  date: int
  chat: Any
  ...

Но использование ключевого слова from не допускается в этом контексте.

Как я мог это сделать?

Примечание: это отличается от "Почему мы не можем использовать ключевые слова в качестве атрибутов", потому что здесь мы получаем внешний JSON, который мы не контролируем, и в любом случае мы должны обрабатывать JSON с полем from.

2 ответа

Решение

Я верю, что вы можете заменить from с from_,

Вы можете сделать это так:

class Message(BaseModel):
    message_id: int
    from_: Optional[str]
    date: int
    chat: Any

    class Config:
        fields = {
        'from_': 'from'
        }
    ...

Там может быть способ сделать это с помощью class заявление, но я не видел ничего в быстром просмотре документации. Что вы можете сделать, это использовать динамическое создание модели вместо этого.

fields = {
    'message_id': (int,),
    'from': (Optional[str], ...),
    'date': (int, ...),
    'chat': (Any, ...)
 }
 Message = create_model("Message", **fields)
Другие вопросы по тегам