You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将RecursiveCharacterTextSplitter返回的Document转为可JSON序列化对象?

解决 TypeError: Object of type Document is not JSON serializable 问题

问题根源是RecursiveCharacterTextSplitter返回的Document是自定义类实例,无法被Python默认的JSON序列化器处理。以下是几种实用转换方法:

1. 仅提取文本内容(最常用)

如果调用嵌入模型只需要文本数据,直接提取每个Document的page_content字段生成纯文本列表:

# 假设docs是分割得到的Document对象列表
texts = [doc.page_content for doc in docs]

# 发送请求到Huggingface模型API
response = requests.post(
    "你的嵌入模型API地址",
    json={"inputs": texts}
)

2. 保留元数据转为字典列表

如果需要保留Document中的元数据(如页码、来源路径等),将每个对象转为字典:

doc_dicts = [
    {"page_content": doc.page_content, "metadata": doc.metadata}
    for doc in docs
]

# 携带元数据发送请求
response = requests.post(
    "你的嵌入模型API地址",
    json={"documents": doc_dicts}
)

3. 自定义JSON编码器(通用序列化场景)

如果需要在更多JSON序列化场景中处理Document对象,自定义编码器类:

import json
from langchain.schema import Document

class DocumentJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Document):
            return {"page_content": obj.page_content, "metadata": obj.metadata}
        # 其他类型按默认规则处理
        return super().default(obj)

# 使用编码器序列化数据
json_payload = json.dumps({"docs": docs}, cls=DocumentJSONEncoder)
response = requests.post(
    "你的嵌入模型API地址",
    data=json_payload,
    headers={"Content-Type": "application/json"}
)

内容的提问来源于stack exchange,提问作者user15970572

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:51:06