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

Jav*_*vi 2 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
Run Code Online (Sandbox Code Playgroud)

Mar*_*yer 8

在 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
Run Code Online (Sandbox Code Playgroud)

allow_population_by_field_name你一起还可以做:

external_data = {"id": "123", "thumbnail": "www.google.es"}
ChatMessageAttachment(**external_data)
# ChatMessageAttachment(id='123', thumbnail='www.google.es')
Run Code Online (Sandbox Code Playgroud)