如何将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
相关产品推荐
相关产品推荐

