对比
JSON Lines 与 JSON
JSON Lines(换行分隔 JSON)是一种 UTF-8 文本约定,每行放置一个独立且有效的 JSON 值。普通 JSON 文本整体表示一个值,因此 JSON Lines 适合逐条处理和追加多条记录。
应该选择哪种格式?
日志或事件需要逐条处理、追加时可考虑 JSON Lines。单个配置文档或完整的嵌套对象/数组则使用普通 JSON。
适用于 JSON Lines
逐行处理的日志和记录 · JSON 记录的流式交换
- 逐条读取和写入记录
- 用常见文本工具追加或合并数据
适用于 JSON
Web API、配置文件和数据交换
- 传递结构化数据
基本信息
| 项目 | JSON Lines | JSON |
|---|---|---|
| 扩展名 | .jsonl, .ndjson | .json |
| MIME 类型 | application/jsonl | application/json |
| 常见用途 | 逐行处理的日志和记录 · JSON 记录的流式交换 | Web API、配置文件和数据交换 |
| 打开方式 | 用文本编辑器或支持 JSON Lines 的工具打开。逐行验证 JSON,有助于定位语法错误所在的记录。 | 可使用文本编辑器、IDE或支持JSON的查看器打开。 |
| 导出或转换 | 转换为 JSON 数组时,把各行汇集为数组元素;转换回 JSON Lines 时,每个值单独写一行。处理大文件时要留意内存占用。 | 可使用应用程序或转换工具将其转换为CSV等格式。 |
按用途选择
逐条读取和写入记录
逐行处理的日志和记录 · JSON 记录的流式交换
JSON Lines用常见文本工具追加或合并数据
逐行处理的日志和记录 · JSON 记录的流式交换
JSON Lines传递结构化数据
Web API、配置文件和数据交换
JSON关键点 1
JSON Lines 的每一行都必须能解析为一个 JSON 值。对象最常见,但字符串、数字、null 等其他 JSON 值也允许;空行不是有效记录。普通 JSON 文本整体表示一个值。
进一步了解差异关键点 2
JSON Lines 使用 UTF-8,值之间以 LF 分隔;JSON 空白规则也允许 CRLF。建议文件最后添加换行符,但并非强制,因此应定义拼接和流边界处理方式。
进一步了解差异进一步了解差异
接收方支持时,逐条处理的数据管道和便于追加的日志可用 JSON Lines。单个结构化文档使用 JSON。应逐行解析 JSON Lines,不要把整个文件当成标准 JSON 文档。
- JSON Lines 文件包含由换行分隔的多个顶层 JSON 值,常见的整文档 JSON 解析器可能会拒绝整个文件。
- 定义记录顺序、空行或格式错误行的处理、坏记录后的恢复方式,以及最后一行是否需要终止符。
- JSON Lines 使用 UTF-8 且不含 BOM。建议的 `application/jsonl` 媒体类型尚未标准化,应与接收端约定传输元数据。
常见问题
JSON Lines 文件只是一个 JSON 数组吗?
不是。它是由换行分隔的 JSON 值序列,而非单个 JSON 数组文档;每行可独立处理。