Pydantic v2能否处理混合类型容器?规范定义方式咨询
Pydantic v2 处理混合类型容器的说明
能否处理混合类型容器?
Pydantic v2完全支持处理混合类型的容器。你给出的代码是合法的:
class Foo(BaseModel): foo_list: list
序列化时,Pydantic会保留列表内所有元素的类型信息,并自动将Python类型转换为对应的JSON类型。比如实例化并序列化:
foo = Foo(foo_list=[1, "hello", True, {"key": "value"}]) print(foo.model_dump_json())
输出结果为:
{"foo_list": [1, "hello", true, {"key": "value"}]}
可以看到,不同类型的元素都被正确序列化,没有丢失类型特征。
推荐的混合类型列表定义方式
直接写list虽然能工作,但缺乏类型提示和数据校验能力,根据场景不同,推荐以下几种更规范的写法:
明确任意类型:
list[Any]
用typing.Any标注元素类型,既保留类型提示,又和直接写list的行为一致:from typing import Any from pydantic import BaseModel class Foo(BaseModel): foo_list: list[Any]限定特定混合类型:
list[Union[...]]
如果列表元素只是几种特定类型的组合,用Union明确列出允许的类型,Pydantic会自动校验元素合法性:from typing import Union, list from pydantic import BaseModel class Foo(BaseModel): foo_list: list[Union[int, str, bool, dict]]这种写法下,若传入不符合指定类型的元素(比如函数对象),Pydantic会直接抛出校验错误,避免非法数据流入。
JSON兼容混合类型:
Json[list]
如果列表元素都是JSON可序列化的混合类型,使用pydantic.Json类型可以确保数据符合JSON规范:from pydantic import BaseModel, Json class Foo(BaseModel): foo_list: Json[list]
内容的提问来源于stack exchange,提问作者user2465039
相关产品推荐
相关产品推荐

