Skip to main content
Open In ColabOpen on GitHub

JSONLoader

这本笔记本提供了一个快速概览,介绍如何开始使用JSON 文档加载器。如需了解所有JSONLoader功能和配置的详细文档,请参阅API参考

  • TODO: 添加有关的其他链接,例如基础API的相关信息等。

概览

集成细节

Class本地序列化JS支持
JSONLoaderlangchain_community

加载器功能

来源文档延迟加载原生异步支持
JSONLoader

设置

要访问JSON文档加载器,您需要安装langchain-community集成包以及jqPython包。

Credentials

无需凭证即可使用JSONLoader类。

要启用对您的模型调用的自动跟踪,请设置您的LangSmith API密钥:

# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"

安装

安装 langchain_communityjq:

%pip install -qU langchain_community jq 

初始化

现在我们可以实例化我们的模型对象并加载文档:

  • TODO: 使用相关参数更新模型实例化。
from langchain_community.document_loaders import JSONLoader

loader = JSONLoader(
file_path="./example_data/facebook_chat.json",
jq_schema=".messages[].content",
text_content=False,
)
API 参考:JSONLoader

加载

docs = loader.load()
docs[0]
Document(metadata={'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat.json', 'seq_num': 1}, page_content='Bye!')
print(docs[0].metadata)
{'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat.json', 'seq_num': 1}

懒加载

pages = []
for doc in loader.lazy_load():
pages.append(doc)
if len(pages) >= 10:
# do some paged operation, e.g.
# index.upsert(pages)

pages = []

从JSON Lines文件读取

如果您想从 JSON Lines 文件中加载文档,请传入 json_lines=True 并指定 jq_schema 以从单个 JSON 对象中提取 page_content

loader = JSONLoader(
file_path="./example_data/facebook_chat_messages.jsonl",
jq_schema=".content",
text_content=False,
json_lines=True,
)

docs = loader.load()
print(docs[0])
page_content='Bye!' metadata={'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat_messages.jsonl', 'seq_num': 1}

读取特定内容键

另一个选项是将jq_schema='.'设置为仅加载特定内容,并提供一个content_key

loader = JSONLoader(
file_path="./example_data/facebook_chat_messages.jsonl",
jq_schema=".",
content_key="sender_name",
json_lines=True,
)

docs = loader.load()
print(docs[0])
page_content='User 2' metadata={'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat_messages.jsonl', 'seq_num': 1}

带有 jq schema 的 JSON 文件content_key

要使用jq模式从JSON文件加载文档,请设置is_content_key_jq_parsable=True。确保content_key兼容并且可以使用jq模式解析。

loader = JSONLoader(
file_path="./example_data/facebook_chat.json",
jq_schema=".messages[]",
content_key=".content",
is_content_key_jq_parsable=True,
)

docs = loader.load()
print(docs[0])
page_content='Bye!' metadata={'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat.json', 'seq_num': 1}

提取元数据

通常,我们希望将 JSON 文件中可用的元数据包含在我们从内容创建的文档中。

以下演示了如何使用 JSONLoader 提取元数据。

有一些关键变化需要注意。在前一个未收集元数据的示例中,我们能够在模式(schema)中直接指定从 page_content 提取值的来源。

在本例中,我们有必要告诉加载器遍历messages字段中的记录。然后jq_schema必须是.messages[]

这允许我们将记录(字典)传递给必须实现的metadata_funcmetadata_func负责识别记录中哪些信息应包含在最终Document对象中存储的元数据里。

此外,我们现在必须在加载器中显式指定content_key参数,以获取记录中用于提取page_content值的键。

# Define the metadata extraction function.
def metadata_func(record: dict, metadata: dict) -> dict:
metadata["sender_name"] = record.get("sender_name")
metadata["timestamp_ms"] = record.get("timestamp_ms")

return metadata


loader = JSONLoader(
file_path="./example_data/facebook_chat.json",
jq_schema=".messages[]",
content_key="content",
metadata_func=metadata_func,
)

docs = loader.load()
print(docs[0].metadata)
{'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat.json', 'seq_num': 1, 'sender_name': 'User 2', 'timestamp_ms': 1675597571851}

API 参考

有关所有 JSONLoader 功能和配置的详细文档,请访问 API 参考: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.json_loader.JSONLoader.html