如何将JSON文件导入数据库?使用JSONLoader与RecursiveJsonSplitter遇序列化错误
解决TypeError: Object of type Document is not JSON serializable问题
问题原因
你传入RecursiveJsonSplitter.split_json()的docs是LangChain Document对象的列表,而这个方法要求传入原始JSON数据(Python字典/列表),不是Document实例,因此触发序列化错误。
解决方案
方案1:直接读取原始JSON并拆分(推荐,无需经过JSONLoader)
如果不需要用JSONLoader的jq筛选功能,直接读取原始JSON文件后拆分:
import json from langchain_text_splitters import RecursiveJsonSplitter # 读取原始JSON数据 with open(file_path, "r", encoding="utf-8") as f: raw_json = json.load(f) # 初始化拆分器并执行拆分 splitter = RecursiveJsonSplitter(max_chunk_size=300) json_chunks = splitter.split_json(json_data=raw_json, convert_lists=True)
方案2:从JSONLoader生成的Document中提取JSON数据
如果需要保留JSONLoader的jq筛选逻辑(比如用jq_schema提取特定节点),需要从Document的page_content中解析出原始JSON:
from langchain_community.document_loaders import JSONLoader from langchain_text_splitters import RecursiveJsonSplitter import json loader = JSONLoader(file_path=file_path, jq_schema=".", text_content=False) docs = loader.load() # 从第一个Document中提取并解析JSON(如果jq_schema匹配多个节点,需要遍历docs) raw_json = json.loads(docs[0].page_content) splitter = RecursiveJsonSplitter(max_chunk_size=300) json_chunks = splitter.split_json(json_data=raw_json, convert_lists=True)
关键注意点
- 当
text_content=False时,JSONLoader生成的Document.page_content是JSON格式的字符串,必须用json.loads()转换为Python字典/列表后才能传给split_json - 如果你的
jq_schema匹配到多个JSON节点,docs会包含多个Document对象,需要循环处理每个对象的page_content
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

