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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:41:19