先看结论
- JSON Lines 是一种按行存储结构化数据的文本格式,每行包含一个 JSON 值,必须使用不带 BOM 的 UTF-8 编码且不能包含空白行。
- Windows 和 macOS 用户可以在支持 UTF-8 的文本编辑器中打开文件。手机用户需选择能够访问该文件并读取 UTF-8 的文本编辑器,可打开的大小取决于应用。程序处理时,应使用 JSON 解析器逐行解析,而不是把整个文件当作一个普通 JSON 文档。逐行结构也适合 Unix 文本处理工具和 shell 管道。行分隔符支持 LF 和 CRLF;JSON Lines 建议最后一条记录后保留换行,NDJSON 则要求每个 JSON 文本后都有换行。
- 格式本身风险较低:合规 JSON 语法不包含赋值和函数调用。但使用 eval 或类似函数解析不可信文本会引入执行代码的风险,应使用 JSON 解析器。能正常解析不代表内容可信,也不代表重新导出后所有值都保持不变。
JSON Lines(.jsonl、.ndjson)文件是什么,怎么打开和转换
JSON Lines 也称 newline-delimited JSON,适合逐条处理记录、日志和进程间消息。每行可以是对象、数组或标量,null 也是合法值。JSON Lines 使用 .jsonl 扩展名,NDJSON 规范推荐 .ndjson。JSON Lines 文档提出 application/jsonl,但明确说明其尚未标准化;NDJSON 规范推荐 application/x-ndjson。
根据逐行值结构与 JSON 数组语法,可将各行值按原顺序组成一个数组,得到普通 JSON 文档。只把扩展名从 .jsonl 改为 .json 不会完成转换。解析后再导出前,应检查重复对象键和数值精度。转成 CSV 时,还需明确嵌套对象、数组和字段不一致的记录如何映射到列。
怎么打开
Windows 和 macOS 用户可以在支持 UTF-8 的文本编辑器中打开文件。手机用户需选择能够访问该文件并读取 UTF-8 的文本编辑器,可打开的大小取决于应用。程序处理时,应使用 JSON 解析器逐行解析,而不是把整个文件当作一个普通 JSON 文档。逐行结构也适合 Unix 文本处理工具和 shell 管道。行分隔符支持 LF 和 CRLF;JSON Lines 建议最后一条记录后保留换行,NDJSON 则要求每个 JSON 文本后都有换行。
Windows 和 macOS 用户可以在支持 UTF-8 的文本编辑器中打开文件。手机用户需选择能够访问该文件并读取 UTF-8 的文本编辑器,可打开的大小取决于应用。程序处理时,应使用 JSON 解析器逐行解析,而不是把整个文件当作一个普通 JSON 文档。逐行结构也适合 Unix 文本处理工具和 shell 管道。行分隔符支持 LF 和 CRLF;JSON Lines 建议最后一条记录后保留换行,NDJSON 则要求每个 JSON 文本后都有换行。
根据逐行值结构与 JSON 数组语法,可将各行值按原顺序组成一个数组,得到普通 JSON 文档。只把扩展名从 .jsonl 改为 .json 不会完成转换。解析后再导出前,应检查重复对象键和数值精度。转成 CSV 时,还需明确嵌套对象、数组和字段不一致的记录如何映射到列。
文件安全
格式本身风险较低:合规 JSON 语法不包含赋值和函数调用。但使用 eval 或类似函数解析不可信文本会引入执行代码的风险,应使用 JSON 解析器。能正常解析不代表内容可信,也不代表重新导出后所有值都保持不变。
来路不明、文件名带两个后缀,或者内容和扩展名对不上——先停下来核对。
转换格式
根据逐行值结构与 JSON 数组语法,可将各行值按原顺序组成一个数组,得到普通 JSON 文档。只把扩展名从 .jsonl 改为 .json 不会完成转换。解析后再导出前,应检查重复对象键和数值精度。转成 CSV 时,还需明确嵌套对象、数组和字段不一致的记录如何映射到列。
先复制一份原文件再转换,转完对照看看画质、元数据和排版有没有变。
常见问题
JSON Lines 文件是什么,用来做什么?
JSON Lines 是每行保存一个 JSON 值的文本文件,适合逐条处理记录、日志和进程间消息。每行可以是对象、数组或标量,包括 null。空白行不是合法的 JSON Lines 记录。
Windows 怎么打开 JSONL 文件?
在支持 UTF-8 的文本编辑器中,通过打开文件操作选择 .jsonl 文件即可查看。每行是独立的 JSON 值。需要处理数据时,使用逐行读取的 JSON 解析器;只接受单个 JSON 文档的解析器可能拒绝多条记录。
Mac 用什么打开 JSONL 文件?
使用支持 UTF-8 的文本编辑器,并采用纯文本模式查看。每条记录应占一行。终端用户可利用 Unix 文本处理工具和 shell 管道处理行,但仍需对每行分别进行 JSON 解析。
手机怎么查看 NDJSON 文件?
选择能够访问手机中目标文件、支持 UTF-8 的文本编辑器,再从应用内打开 .ndjson。文件访问方式和可处理大小取决于应用;文件格式本身不保证所有手机编辑器都能打开。
NDJSON 解析失败和空行有什么关系?
JSON Lines 不允许空白行。NDJSON 解析器可以忽略空行,但必须说明该行为,并应允许用户配置,因此不同工具可能表现不同。还应检查出错行是否有不完整的 JSON,或把一条记录拆到了多行。
JSON Lines 和普通 JSON 有什么区别,多个记录该选哪个?
需要按行读取、逐条处理记录时,可选 JSON Lines。接收方要求单个 JSON 文档时,应使用普通 JSON 数组等结构。把多个 JSON 值用换行隔开,并不会形成一个合法的单一 JSON 文档。
JSONL 怎么转换成 JSON 数组?
将每行解析为一个 JSON 值,保留原顺序,再把这些值放入同一个数组,用逗号分隔。这是根据两种结构得出的转换方法。只把 .jsonl 改名为 .json,不能将多条记录转换成 JSON 数组。
JSONL 转 CSV 会丢失哪些数据,应该检查什么?
先确认嵌套对象、数组和字段不一致的记录如何对应 CSV 列。还要检查重复对象键、大整数和高精度小数:部分解析实现只保留重复键的最后一个值,超出工具数值精度的数字也可能发生变化。
JSONL 文件解析有什么安全风险?
合规 JSON 语法不包含赋值和函数调用,但用 eval 或类似函数解析不可信文本会引入执行代码的风险。应使用 JSON 解析器。解析成功只能说明输入被该解析器接受,不能证明内容可信。
JSON Lines 中文乱码或 UTF-8 编码错误怎么解决?
确认文件原始编码,将正确解码的副本保存为不带 BOM 的 UTF-8;这是 JSON Lines 的编码要求。如果此前读取时已把字符替换掉,仅修改编码标记不能恢复原文,应从原始文件重新读取。
JSONL 文件的大小和嵌套深度有什么限制?
所引规范没有给出所有工具通用的打开上限。解析器可以限制文本大小、嵌套深度和字符串长度。未配对的 Unicode 代理项也可能导致不可预测行为或运行时异常,需结合所用读取工具的限制判断。
相关格式
资料来源
JSON Lines — 官方格式文档 · JSON Lines 格式项目,维护者 Ian Ward
NDJSON — Newline delimited JSON Specification · NDJSON 官方规范仓库
RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format · IETF Standards Track / RFC Editor