对基于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


相关推荐
码农学院3 分钟前
AI优化AIO技术演进史:从模板生成到多智能体协同创作
人工智能
科技发布7 分钟前
拓氪科技 AI 内容引擎软文投放效果详解
人工智能·科技
nanawinona14 分钟前
2026年下半年量化学习,不同基础要查不同缺口
人工智能·python
海盗123419 分钟前
AI新闻日报_2026-07-22
人工智能
CTA量化套保29 分钟前
最新量化表达入门,从概念规则到简单实现
人工智能·python
AI应用苏大大32 分钟前
企业AI架构缺陷:低价工具堆叠,造成结构性效率浪费
人工智能
空中湖1 小时前
Spring AI Agent 编排:ReAct 模式 + 多 Agent 协作实战
人工智能·spring·react.js
only-qi1 小时前
RAG 工作机制详解:构建高质量知识库的技术全流程
网络·人工智能·rag
John_ToDebug1 小时前
Git Stash 完全指南:临时保存工作区的艺术
人工智能·git·agent
feibaoqq1 小时前
Atlas边端板卡AI识别:部署方法、技术实现、优劣及应用场景
人工智能·低空经济·低空安防