【问题标题】:Pydantic: How to parse JSON with custom property namePydantic:如何使用自定义属性名称解析 JSON
【发布时间】:2021-11-13 15:00:52
【问题描述】:

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

【问题讨论】:

  • 为什么不预先将数据字典中的thumbnailUrl 替换为thumbnail
  • 这确实是我的第一个解决方案

标签: python pydantic


【解决方案1】:

在 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')

【讨论】:

  • 谢谢,这正是我想要的
  • 不错!我不知道 pydantic 中的 alias 用法。我喜欢它,干净简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多