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


相关推荐
漂流瓶jz2 小时前
【AI】大模型本地部署与量化:Ollama、transformers、llama.cpp实践
人工智能·llm·ai编程
飞哥数智坊3 小时前
AI时代,我们到底该学什么、用什么,为什么还没提效?
人工智能
飞哥数智坊3 小时前
GPT 做架构,国内模型写代码:这条 AI 开发路线能跑通吗?
人工智能·ai编程
AI_AGENT_DEV_AI4 小时前
AI 智能体的开发与上线
人工智能
VL——MOESR4 小时前
【具身智能】VLA论文阅读随笔
论文阅读·人工智能·机器学习·具身智能·vla
OCR_133716212754 小时前
从模板匹配到AI泛化识别:文本抽取如何重构护照阅读器落地生态
人工智能·重构
大唐荣华4 小时前
从OpenAI关停Sora看世界模型、AI视频与国内具身智能赛道路线分化
人工智能·openai·sora·内容生成
DevOps老兵4 小时前
AI Infra实战02:GPU监控实战,用DCGM+Prometheus+Grafana看清每一张卡
人工智能·grafana·prometheus·ai infra·gpu监控·dcgm
旧日之血_Hayter4 小时前
Antigravity 工作流的实践记录
人工智能
dozenyaoyida4 小时前
AI与大模型新闻日报 | 2026-09-01
人工智能·ai·大模型·新闻