对基于Pydantic BaseModel的实例进行JSON序列化

BaseModel在LLM时代在信息抽取场景中应用广泛。

在Pydantic中,继承自BaseModel的类可以通过内置方法轻松序列化为 JSON。

这里基于网络资料,示例将BaseModel子类实例转换为JSON字符串或字典,控制序列化细节。

1 JSON序列化

1.1 model_dump与json.dumps

model_dump()会返回一个字典,该字典可以继续使用标准json库的json.dumps再序列化。

示例代码如下

复制代码
import json
from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

user = User(name="Alice", age=30)
data_dict = user.model_dump()          # {'name': 'Alice', 'age': 30}
json_str = json.dumps(data_dict)       # '{"name": "Alice", "age": 30}'

1.2 model_dump_json

Pydantic v2 提供了直接返回JSON字符串的方法model_dump_json。

model_dump_json()默认返回紧凑 JSON,可通过indent参数美化。

如果模型包含复杂嵌套对象,序列化会自动递归处理。

以下是代码示例

复制代码
json_str = user.model_dump_json()      # '{"name":"Alice","age":30}'

model_dump_json返回的是紧凑型的json,可传递参数控制格式(如 indent)。

复制代码
json_str = user.model_dump_json(indent=2)

1.3 Pydantic v1兼容写法

在 v1 中使用 ".dict()" 和 ".json()"

代码示例如下

复制代码
data_dict = user.dict()
json_str = user.json()                 # 直接返回 JSON 字符串

对于 v1 用户,推荐升级到 v2 以获得更好的性能和安全性。

2. 自定义序列化行

Pydantic BaseModel的子类实例,还支持自定义序列化。

以下是一些经常使用的功能示例。

2.1 排除字段

使用exclude参数,设置需要排除的字段

复制代码
user.model_dump_json(exclude={'age'})   # '{"name":"Alice"}'

2.2 使用别名

如果Pydantic BaseModel子类实例使用了别名,可以通过by_alias控制序列化时是否使用别名。

by_alias=True

示例代码如下

复制代码
class User(BaseModel):
    name: str = Field(alias="full_name")
user = User(full_name="Bob")
user.model_dump_json(by_alias=True)     # '{"full_name":"Bob"}'

2.3 处理自定义类型

通过 json_encoders或实现__get_pydantic_core_schema__实现

示例代码如下

复制代码
from datetime import datetime
class Event(BaseModel):
    dt: datetime
    class Config:
        json_encoders = {datetime: lambda v: v.isoformat()}

2.4 序列化到文件

另外,还可以直接将BaseModel子类实例序列化到文件,代码更简洁,可读性更好。

示例如下

复制代码
with open("user.json", "w") as f:
    f.write(user.model_dump_json())

reference


相关推荐
0xR3lativ1ty3 分钟前
每周AI工具新动态
人工智能
jerryinwuhan6 分钟前
面向产业带与中小企业数字化转型的电商运营人才培养模式
大数据·人工智能
Drgfd14 分钟前
智造赋能品控:汪进进以精益生产,夯实质量制造底座
人工智能·制造
米小虾24 分钟前
"Chat is dead":OpenAI 正在杀死的不是聊天,是整个 AI 交互范式
人工智能·openai
冬奇Lab28 分钟前
Agent 系列(18):成本与性能优化——省钱且更快
人工智能·llm·agent
Hefei GlobefishAI41 分钟前
合肥合豚AI硬件方案:专为智能售货柜厂商定制的无人零售接口套件
人工智能·零售·自动售货机·无人零售硬件·ai硬件方案·智能售货柜·接口套件
冬奇Lab1 小时前
每日一个开源项目(第127篇):PM Skills Marketplace - 把顶级产品方法论塞进 AI Agent
人工智能·开源·资讯
吴佳浩1 小时前
Hermes vs OpenClaw:基于源码的 Agent Loop 全面分析
人工智能·llm·agent
AI袋鼠帝1 小时前
腾讯出手了!彻底入局企业级Agent。
人工智能
和平宇宙1 小时前
AI笔记005. hermes-DeepSeek V4 Pro, 128K上下文引发的探索
前端·人工智能·笔记