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

求助:LangChain加载JSON文件夹遇ValueError错误的解决办法

解决LangChain DirectoryLoader加载JSON报错:Json schema does not match the Unstructured schema

问题原因

DirectoryLoader默认使用UnstructuredLoader,这个加载器对JSON的结构有特定要求(需符合Unstructured定义的文档schema),普通JSON文件基本不满足该要求,所以即便添加glob='**/*.json'参数仍会触发报错。

解决办法

1. 使用专门的JSONLoader替代默认加载器

直接指定DirectoryLoader的loader_cls为JSONLoader,同时根据你的JSON结构配置解析规则:

from langchain.document_loaders import DirectoryLoader, JSONLoader

def metadata_func(record: dict, metadata: dict) -> dict:
    # 自定义元数据提取逻辑,可按需调整
    metadata["source"] = metadata["source"]
    metadata["id"] = record.get("id")  # 替换为你JSON中的实际字段
    return metadata

loader = DirectoryLoader(
    r'C:\your_json_folder_path',
    glob='**/*.json',
    loader_cls=JSONLoader,
    loader_kwargs={
        "jq_schema": ".",  # jq表达式,"."表示加载整个JSON内容
        "content_key": "content",  # 若JSON有专门的内容字段,替换为对应键名;无则可省略
        "metadata_func": metadata_func
    }
)
documents = loader.load()

2. 调整UnstructuredLoader的解析模式

如果坚持使用UnstructuredLoader,可尝试设置mode参数改变解析逻辑:

from langchain.document_loaders import DirectoryLoader
from langchain.document_loaders.unstructured import UnstructuredLoader

loader = DirectoryLoader(
    r'C:\your_json_folder_path',
    glob='**/*.json',
    loader_cls=UnstructuredLoader,
    loader_kwargs={
        "mode": "elements"  # 或尝试"single"模式,两种模式分别测试
    }
)
documents = loader.load()

3. 自定义加载函数处理任意JSON

若以上方法不适用,可手动编写加载函数解析JSON:

from langchain.document_loaders import DirectoryLoader
from langchain.schema import Document
import json
import os

def custom_json_loader(file_path: str) -> list[Document]:
    with open(file_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
    # 将JSON转为字符串作为文档内容,元数据可自定义
    content = json.dumps(data, ensure_ascii=False)
    metadata = {"source": file_path}
    return [Document(page_content=content, metadata=metadata)]

loader = DirectoryLoader(
    r'C:\your_json_folder_path',
    glob='**/*.json',
    loader_func=custom_json_loader
)
documents = loader.load()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:52:10