DevToolPal
简

JSON Lines 与 JSON 互转

把 JSON Lines(JSONL、NDJSON)转换成 JSON 数组,或把 JSON 数组转回 JSON Lines,出错时给出行号。

本地处理,不上传

选项

方向
缩进

输入

0 字符 · 0 B

输出

0 字符 · 0 B

这是什么

JSON Lines(也叫 JSONL 或 NDJSON)每行存放一个 JSON 值。它是日志、数据导出、流式 API、BigQuery 和 Elasticsearch 批量导入以及机器学习数据集(例如 OpenAI 微调文件)的常用格式,因为程序可以一次读取或追加一条记录,而不必把整个文件载入内存。

但很多工具只接受一个 JSON 数组。这个工具把 JSON Lines 转换成格式化的 JSON 数组,也能把 JSON 数组转回 JSON Lines,每行一条紧凑的记录。

怎么用

  1. 选择 方向:JSON Lines → JSON,或 JSON → JSON Lines。
  2. 粘贴数据,或上传 .jsonl、.ndjson、.json 文件,也可以点 示例。
  3. 输出 JSON 时,可以选 2 或 4 个空格缩进,或选 压缩 输出成一行。
  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 工具都是如此。