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


相关推荐
归秋0444 分钟前
2026 企业 AI 办公工具选型指南:方法论与主流平台全景
人工智能
程序员z71 小时前
REA 知识点梳理:把逆向分析能力接进 AI Agent 的开源工具链
人工智能
MobotStone4 小时前
AI 玩不好?别怪工具,是你给它定的规矩有问题!
人工智能
AI日报派送佬8 小时前
2026年10月14日AI行业日报|Gemini 4 Argon正式发布;小模型跨设备传播风险引发安全热议
网络·人工智能·openai·谷歌·deepseek·anthropic·ai日报
镜象科技9 小时前
职业院校AI心理健康解决方案怎么选?三个特殊场景与三类路线
人工智能
Leo.yuan9 小时前
企业Data Agent架构选型:帆软Dora基于NL2BI的现有BI体系复用方案
大数据·人工智能
朱涛的自习室10 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
米小虾10 小时前
上下文:Agent 的眼睛里到底装着什么
人工智能·agent
米小虾10 小时前
Agent = 大脑 + 眼睛 + 手脚:一篇看懂现代 AI Agent 的骨架
人工智能
小小测试开发10 小时前
安全评测得分 0.9556 掉到 0.3257,只改了 top_k 和 prompt_style 之外的题面比例
人工智能·安全·prompt