JSONLoader
本笔记本提供了快速入门JSON 文档加载器的概述。有关所有JSONLoader功能和配置的详细文档,请前往API参考。
- TODO: 添加任何其他相关链接,例如关于底层API的信息等。
概述
集成详情
类 | 包 | 本地 | 可序列化 | JS支持 |
---|---|---|---|---|
JSONLoader | langchain_community | ✅ | ❌ | ✅ |
加载器特性
来源 | 文档懒加载 | 原生异步支持 |
---|---|---|
JSONLoader | ✅ | ❌ |
设置
要访问JSON文档加载器,您需要安装langchain-community
集成包以及jq
python包。
凭证
使用JSONLoader
类不需要任何凭证。
如果你想获得自动化的最佳模型调用跟踪,你也可以通过取消注释以下内容来设置你的LangSmith API密钥:
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"
安装
安装 langchain_community 和 jq:
%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,
)
加载
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模式的JSON文件 content_key
要从JSON文件中加载文档,使用jq模式中的content_key
,请设置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
提取元数据。
有一些关键变化需要注意。在前一个我们没有收集元数据的例子中,我们设法直接在模式中指定了可以从哪里提取page_content
的值。
在这个例子中,我们必须告诉加载器遍历messages
字段中的记录。然后jq_schema必须是.messages[]
这允许我们将记录(字典)传递到必须实现的metadata_func
中。metadata_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