← 返回工具指南
工具指南JSONLNDJSONJSON LinesJSON 转 CSV日志处理数据转换逐行校验

JSONL 和 NDJSON 是什么?逐行校验、转 JSON 与 CSV 指南

说明 JSONL/NDJSON 每行一个 JSON 值、UTF-8、BOM、空行和末尾换行规则,并介绍逐行定位错误、转 JSON 数组、CSV 字段展开与大文件处理边界。

打开配套工具 →

JSONL、JSON Lines 和 NDJSON 通常指同一类交换格式:文件不是一个巨大的 JSON 数组,而是一行一个完整 JSON 值。日志、模型训练数据、批量 API 和流式导出常使用这种结构,因为程序可以逐行读取,不必先把整个文件解析进内存。

可以使用 JSONL / NDJSON 校验与转换工具 在浏览器本地逐行检查错误,转换为 JSON 数组或 CSV,也可以把 JSON 数组整理成规范 JSONL。工具适合抽样和中小文件;超过页面限制时应改用流式命令行或数据处理程序。

JSONL 与普通 JSON 数组有什么不同

一个普通 JSON 数组外层有方括号,各元素之间用逗号分隔:

json已剪下 ✓
[
  {"id": 1, "name": "Alpha"},
  {"id": 2, "name": "Beta"}
]

同样数据写成 JSONL 后,每行都是独立 JSON,不需要外层方括号,也不能在行尾加逗号:

jsonl已剪下 ✓
{"id":1,"name":"Alpha"}
{"id":2,"name":"Beta"}

直接把多行漂亮打印的对象当作 JSONL 会失败,因为第一行 { 本身不是完整 JSON 值。反过来,把 JSONL 直接交给只接受单个 JSON 文档的解析器,也会在第二行开始报错。转换时必须先明确目标系统接受的是数组还是逐行记录。

UTF-8、BOM、空行和末尾换行的规则

JSON Lines 官方说明 给出三个核心要求:内容使用 UTF-8;每一行都是合法 JSON 值;记录以换行符分隔。它还明确不应包含 UTF-8 BOM,并建议最后一条记录之后保留换行符,便于拼接文件。

末尾换行只是最后一条记录的终止符,不应被算成额外空记录。文件中间的空行则不是合法 JSON 值。部分数据管道会选择忽略中间空行,但严格交换时最好先定位并清理,因为空行可能意味着导出过程丢了一条记录。

Windows 的 CRLF 和 Unix 的 LF 都可以作为行结束。JSON 字符串内部若需要换行,必须写成转义序列 \n,不能把一个字符串直接拆到下一行。BOM 虽然有时被编辑器自动加入,但会让严格解析器在第一字符处失败,应在源头关闭。

怎样快速定位一行坏数据

逐行校验的优势是错误位置明确。例如下面第二行缺少右侧引号:

jsonl已剪下 ✓
{"id":1,"name":"Alpha"}
{"id":2,"name":"Beta}
{"id":3,"name":"Gamma"}

普通“大 JSON”解析器可能只给出字符偏移;逐行工具能显示第 2 行原文和解析消息。修复时不要只删除坏行,应回到数据源判断它是转义错误、截断、编码异常,还是记录本身缺失。

每行不一定非要是对象。数字、字符串、布尔值、数组和 null 都是合法 JSON 值。不过准备转 CSV 时,对象最容易映射成字段;数组或标量通常只能放进一个 value 列。下游系统如果要求对象,应在转换前明确限制。

JSONL 转 CSV 时为什么会出现很多空格子

CSV 是二维表,JSON 对象可以嵌套且每行字段不同。工具会收集所有对象键作为列,某条记录没有对应字段时写空值。例如第一条有 email、第二条没有,CSV 仍需保留 email 列,第二行该格为空。

开启嵌套展开后:

json已剪下 ✓
{"id":1,"meta":{"active":true,"market":"US"}}

会生成 idmeta.activemeta.market 三列。数组不会盲目拆成多列,而是保留为 JSON 文本,避免数组长度不同导致表结构失控。展开层级过深时也应停止,因为键名会变长且很难在表格中维护。

CSV 输出还要注意公式注入。若用户提供的文本以 =+-@ 开头,电子表格可能把它当作公式。面向 Excel 或第三方人员交付时,建议开启公式保护,并保留原始 JSONL 以便追溯。

大文件应该用什么方式处理

JSONL 的主要优势之一就是流式处理,但浏览器文本框仍要把整个文件保存在内存中。页面设置 20 MB 和 50,000 条上限,是为了避免手机或普通电脑失去响应,不代表格式本身只有这个容量。

对于几百 MB 或持续增长的日志,应使用逐行流式工具。例如 Node.js 可用 readline,Python 可逐行读取文件,命令行也可以用 jq -c 做转换。无论使用哪种方式,都建议统计:

  1. 源文件总行数与有效记录数。
  2. 空行、解析错误和被跳过记录数。
  3. 对象、数组与标量的数量。
  4. 输出记录数和文件校验值。
  5. 是否检测到 BOM、异常编码或超长单行。

先在浏览器用少量样本确认字段和目标格式,再把同样规则迁移到流式脚本,通常比直接在超大生产文件上试错更安全。