这是什么
JSON Lines(也叫 JSONL 或 NDJSON)每行存放一个 JSON 值。它是日志、数据导出、流式 API、BigQuery 和 Elasticsearch 批量导入以及机器学习数据集(例如 OpenAI 微调文件)的常用格式,因为程序可以一次读取或追加一条记录,而不必把整个文件载入内存。
但很多工具只接受一个 JSON 数组。这个工具把 JSON Lines 转换成格式化的 JSON 数组,也能把 JSON 数组转回 JSON Lines,每行一条紧凑的记录。
怎么用
- 选择 方向:JSON Lines → JSON,或 JSON → JSON Lines。
- 粘贴数据,或上传
.jsonl、.ndjson、.json文件,也可以点 示例。 - 输出 JSON 时,可以选 2 或 4 个空格缩进,或选 压缩 输出成一行。
- 复制或下载结果,或者用 作为输入 再转换回去。
如果某一行不是合法的 JSON,错误提示会给出行号和列号,让你直接定位到出错的记录——当日志文件里几千条记录中有一条被截断时非常有用。
示例
下面这三行 JSON Lines:
{"id": 1, "event": "signup"}
{"id": 2, "event": "login"}
{"id": 3, "event": "logout"}
会变成这个 JSON 数组:
[
{
"id": 1,
"event": "signup"
},
{
"id": 2,
"event": "login"
},
{
"id": 3,
"event": "logout"
}
]
反向转换时,数组的每个元素写成一行,不带空格,文件以换行结尾。
什么时候用哪种
记录是一条条产生或消费时用 JSON Lines:追加日志、流式返回结果、把大数据集分给多个工作进程,或者用 grep、head、wc -l 这类按行处理的工具。程序需要一次拿到整个集合时用 JSON 数组,例如配置文件、测试数据或 REST 接口的响应体。
常见问题
› JSONL、NDJSON 和 JSON Lines 有什么区别?
它们是同一种格式的不同叫法:每行一个完整的 JSON 值,用换行符分隔。JSON Lines(.jsonl)和换行分隔 JSON(.ndjson)只是名称和扩展名不同。
› 允许空行吗?
读取时会跳过空行和末尾的换行。Windows 换行符(CRLF)和 UTF-8 BOM 也能正确处理。
› 我的文件是格式化过的 JSON,一个对象跨了好几行,为什么报错?
JSON Lines 要求每个值都写在一行内。如果输入是普通的 JSON 数组,请把方向切换为 JSON → JSON Lines;如果是一串格式化过的对象,请先把它们放进一个数组。
› 转换会改变数字或键的顺序吗?
不会。值和键的顺序都保持不变,只改变空白。超出 JavaScript 安全整数范围(约 9 千万亿)的超大整数可能丢失精度,所有基于浏览器的 JSON 工具都是如此。