我收到了来自服务器的响应:

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

我想将此响应序列化为PYDANIC模型,但我不知道如何在PYDANIC模型中解析list(示例[1, "red"]

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]

推荐答案

例如,您可以使用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,但这一种似乎是最简单的.

我希望这能帮到你!

Python相关问答推荐

模型序列化器中未调用现场验证器

Pandas :多索引组

Chatgpt API不断返回错误:404未能从API获取响应

理解Python的二分库:澄清bisect_left的使用

从webhook中的短代码(而不是电话号码)接收Twilio消息

@Property方法上的inspect.getmembers出现意外行为,引发异常

Pytest两个具有无限循环和await命令的Deliverc函数

Python中的嵌套Ruby哈希

使用索引列表列表对列进行切片并获取行方向的向量长度

使可滚动框架在tkinter环境中看起来自然

如何过滤包含2个指定子字符串的收件箱列名?

在ubuntu上安装dlib时出错

计算天数

为什么常规操作不以其就地对应操作为基础?

python sklearn ValueError:使用序列设置数组元素

jsonschema日期格式

比较两个有条件的数据帧并删除所有不合格的数据帧

Pandas:将值从一列移动到适当的列

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

按条件计算将记录拆分成两条记录