JSONL,也常叫 JSON Lines 或 NDJSON,是一种“每行一个 JSON”的文本格式。对于日志、AI 训练数据、大规模数据导入导出、流式处理,JSONL 往往比普通 JSON 更合适。
普通 JSON 很适合表达一个完整对象、配置文件或 API 响应;JSONL 更像一条一条追加的记录流。它仍然使用 JSON 语法,但文件整体不是一个大数组,而是由多行独立 JSON 值组成。
JSONL 的基本规则
- 一行就是一条完整 JSON 记录,最常见的是一个对象。
- 每一行必须能被单独 JSON.parse;行与行之间不需要逗号。
- 文件末尾可以有换行,处理时通常按行读取。
- 不要把多行格式化后的对象直接放进 JSONL,因为那会破坏“一行一条记录”的约定。
一个 JSONL 示例
{"timestamp":"2026-09-21T10:00:00Z","level":"info","message":"job started","jobId":"import-42"}
{"timestamp":"2026-09-21T10:00:02Z","level":"warn","message":"retrying row","row":128}
{"timestamp":"2026-09-21T10:00:05Z","level":"info","message":"job finished","records":1000000}上面三行分别是三条记录。你可以只读取第一行、追加第四行,或者从中间某一行继续处理,而不需要把整个文件一次性解析成内存里的数组。
和普通 JSON 数组有什么区别?
[
{
"timestamp": "2026-09-21T10:00:00Z",
"level": "info",
"message": "job started",
"jobId": "import-42"
},
{
"timestamp": "2026-09-21T10:00:02Z",
"level": "warn",
"message": "retrying row",
"row": 128
}
]| 对比项 | 普通 JSON | JSONL |
|---|---|---|
| 文件结构 | 通常是一个对象或数组 | 多行独立 JSON 记录 |
| 追加数据 | 需要维护数组逗号和结尾括号 | 直接追加新的一行 |
| 读取方式 | 常常一次性解析完整文件 | 可以逐行读取、逐条处理 |
| 错误影响 | 一个语法错误可能让整个文件解析失败 | 通常只影响出错的那一行 |
| 适合规模 | 小到中等配置、接口响应、文档数据 | 日志、事件、训练样本、批量导入导出 |
为什么日志更适合 JSONL?
日志天然是一条一条产生的。服务运行时不断写入新事件,如果使用普通 JSON 数组,就要反复处理逗号、数组结尾和文件完整性;使用 JSONL,只要把每条日志序列化成一行并追加即可。
这也让后续处理更简单:命令行工具、日志采集器、消息队列消费者和数据仓库导入任务都可以按行消费,不必等待整个文件完成。
为什么 AI 训练数据常用 JSONL?
AI 训练或微调数据通常由大量样本组成,每个样本可以独立验证、过滤、打乱、切分。JSONL 正好符合这种“样本级”处理方式。
{"messages":[{"role":"user","content":"Summarize this log entry"},{"role":"assistant","content":"The import job started successfully."}],"source":"logs"}
{"messages":[{"role":"user","content":"Classify the ticket urgency"},{"role":"assistant","content":"high"}],"source":"support"}在这种结构里,一行就是一个训练样本。数据团队可以对单行做 schema 检查、去重、抽样和质量标注,也可以把多个 JSONL 文件合并成更大的数据集。
适用场景
- 日志:应用日志、审计日志、埋点事件、系统指标快照。
- AI 训练数据:对话样本、分类样本、指令微调数据、标注记录。
- 大规模导入导出:数据库导出、搜索索引重建、数据仓库批量加载。
- 流式处理:消息队列消费、实时 ETL、长连接返回、分块下载。
- 数据清洗流水线:逐行过滤、映射、聚合、抽样,而不是一次性加载全量文件。
什么时候仍然应该用普通 JSON?
如果数据本身就是一个有层级关系的文档,例如配置文件、页面状态、单个 API 响应或需要整体事务语义的数据,普通 JSON 更直观。JSONL 的优势在于“很多条彼此独立的记录”,不是替代所有 JSON。
小结
JSONL 的核心价值是把大文件拆成可独立处理的记录。它牺牲了普通 JSON 数组的整体结构感,换来更好的追加写入、逐行读取、错误隔离和流式处理能力。