【问题标题】:How to validate JSON field with name "from"如何验证名称为“来自”的 JSON 字段
【发布时间】:2019-04-10 19:07:53
【问题描述】:

我想通过使用pydantic 验证器来验证包含 from 字段(Python 中的保留字)的 JSON 对象(它位于 Telegram Bot API 中)。所以我的模型应该如下所示:

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

但在这种情况下不允许使用 from 关键字。

我该怎么做?

注意:这与“为什么我们不能使用关键字作为属性”不同,因为这里我们得到了我们无法控制的外部 JSON,无论如何我们都应该处理带有 from 字段的 JSON。

【问题讨论】:

  • 建议的副本说为什么你不能使用from作为一个属性,而不是你如何解决这个问题来使用from作为一个JSON对象一把钥匙。
  • 可能工作的一种方法(可能不是“正确”的方法)是自己更新注释:Message.__annotations__.update({'from': Optional[str]})

标签: python json telegram-bot pydantic


【解决方案1】:

believe你可以用from_替换from

你可以这样做:

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

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

【讨论】:

  • 验证后获取数据valid_data = Message(data).dict(by_alias=True)
【解决方案2】:

可能有一种方法可以使用class 语句来执行此操作,但我在快速浏览文档时没有看到任何内容。您可以做的是改用动态模型创建。

fields = {
    'message_id': (int,),
    'from': (Optional[str], ...),
    'date': (int, ...),
    'chat': (Any, ...)
 }
 Message = create_model("Message", **fields)

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多