Format Atlas

对比

JSON Lines 与 JSON

JSON Lines(换行分隔 JSON)是一种 UTF-8 文本约定,每行放置一个独立且有效的 JSON 值。普通 JSON 文本整体表示一个值,因此 JSON Lines 适合逐条处理和追加多条记录。

应该选择哪种格式?

日志或事件需要逐条处理、追加时可考虑 JSON Lines。单个配置文档或完整的嵌套对象/数组则使用普通 JSON。

适用于 JSON Lines

逐行处理的日志和记录 · JSON 记录的流式交换

  • 逐条读取和写入记录
  • 用常见文本工具追加或合并数据

适用于 JSON

Web API、配置文件和数据交换

  • 传递结构化数据

基本信息

项目JSON LinesJSON
扩展名.jsonl, .ndjson.json
MIME 类型application/jsonlapplication/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 数组文档;每行可独立处理。

了解详情

参考资料与规范