代码之家  ›  专栏  ›  技术社区  ›  Oliver

如何将列表项列表序列化到pydantic模型

  •  0
  • Oliver  · 技术社区  · 2 年前

    我收到服务器的回复:

    {
        "date": "2024-02-05 15:34:44",
        "status": True,
        "data": [
            [1, "red"],
            [2, "blue"],
            [3, "yellow"]
        ]
    }
    

    我想将这个响应序列化到pydantic模型,但我不知道如何解析 list 实例 [1, "red"] )在pydantic模型中

    class Item(BaseModel): # how convert list from data to this model
        id: int
        color: str
        ...
    
    
    class Model(BaseModel):
        date: datetime
        status: bool
        data: list[Item]
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   Axel Donath    2 年前

    例如,您可以使用 model_validator 将列表解析为 Item 模型

    from pydantic import BaseModel, model_validator
    
    data = {
        "date": "2024-02-05 15:34:44",
        "status": True,
        "data": [
            [1, "red"],
            [2, "blue"],
            [3, "yellow"]
        ]
    }
    
    class Item(BaseModel):
        id: int
        color: str
    
        @model_validator(mode="before")
        @classmethod
        def validate(cls, values):
            id, color = values
            return {"id": id, "color": color}
        
    
    
    class Model(BaseModel):
        date: datetime
        status: bool
        data: list[Item]
    
    
    print(Model(**data))
    

    打印内容:

    date=datetime.datetime(2024, 2, 5, 15, 34, 44) status=True data=[Item(id=1, color='red'), Item(id=2, color='blue'), Item(id=3, color='yellow')]
    

    可能还有其他方法,例如 AliasPath ,但这个似乎是最简单的。