导出为结构化 JSON
除了七种文档格式之外,文件网格——以及每条消息的内联导出文件菜单——还提供JSON导出。与其他格式不同,JSON 不是一份可供阅读的成品文档:它是对话的机器可读数据,专为希望将聊天内容输入脚本、数据库或其他工具而无需自行抓取页面的开发人员设计。
该文件是一个经过美化打印的 JSON 对象——一个关于对话的元数据块,后跟一个扁平的消息列表。
- 对话元数据 —
schema(一个带版本标识符,当前为ai-chat-extractor/conversation@2,以便消费者可以识别格式及其版本)、site、title、url、exported_at(一个 ISO 时间戳)、content_format(始终为markdown)和message_count。 messages— 一个有序数组,每条消息一个条目,每个条目包含其index、role(发言者——user或assistant),以及文本的两种视图:content,作为 Markdown 的完整消息,以及contents,将同一消息拆分为带类型的部分。
这两种视图服务于两种消费者。content 是整个消息作为一个 Markdown 字符串——简单脚本所需的一切。contents 将其分解为带类型段落的有序列表,因此管道可以根据类型选择或删除部分,而无需重新解析 Markdown:text 用于散文,thinking 用于模型的推理块,code 用于带围栏的代码块(带可选的 language),image 用于图片(带其 url 和 alt 文本——无论是写成 Markdown 还是 HTML 标签),以及 table 用于 Markdown 表格,拆分为其 headers 和 rows,以便消费者获得真实的列而不是一堆管道字符。AI Chat Clipper 只会发出它可以从对话中诚实识别的段落类型——它不会凭空创造不存在的结构。例如,引文以普通的内联链接形式出现,没有自己的块,因此故意没有单独的 sources 类型。
一个包含代码块的简短助手回复导出如下:
{
"schema": "ai-chat-extractor/conversation@2",
"site": "claude",
"title": "Reversing a string",
"url": "https://claude.ai/chat/…",
"exported_at": "2026-07-18T10:32:00.000Z",
"content_format": "markdown",
"message_count": 2,
"messages": [
{ "index": 0, "role": "user", "content": "How do I reverse a string in Python?",
"contents": [ { "type": "text", "text": "How do I reverse a string in Python?" } ] },
{ "index": 1, "role": "assistant", "content": "Use a slice:\n\n```python\ns[::-1]\n```",
"contents": [
{ "type": "text", "text": "Use a slice:" },
{ "type": "code", "language": "python", "text": "s[::-1]" }
] }
]
}