JSONL 转换器

在浏览器中将 JSONL 和 NDJSON 转为 JSON 数组,也可将 JSON 数组转回 JSON Lines,逐行校验并导出有效记录。雪花 ID 等大数字按原样保留。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
把 JSONL 记录组成 JSON 数组。有错误行时停止转换,除非启用“只转换有效行”。
把数组每一项写成一行紧凑 JSONL。顶层对象或单个值会报错。
载入三条示例记录,并转换成 JSON 数组。
清空两栏、所选文件、计数、问题与排队任务,保留选项。工具内 Ctrl/⌘+L 执行同样操作。
选项与下载
默认开启。关闭后空行计为错误。更改选项会清除转换结果并重新校验 JSONL。
JSONL 转 JSON 时跳过错误记录。更改选项会清除转换结果并重新校验,转换仍需手动执行。
JSON 输出使用两空格缩进。更改选项时,JSONL 面板有内容就会重新转换。
每行写一个完整 JSON 值。输入停止 350 毫秒后自动校验;“打开”读取本地文件并只校验,不转换。数字保留原有字符。
复制和“下载 .jsonl”取最近转换的紧凑记录,不含已跳过的错误行。编辑任一侧后,转换成功前这两项均不可用。
粘贴顶层 JSON 数组。编辑会清掉旧 JSONL 结果,点击 JSON → JSONL 才转换。“打开”读取本地数组文件并立即转换。
复制和“下载 .json”取最近转换的数组,并使用当前格式设置。编辑任一侧后,转换成功前这两项均不可用。
0总行数
0有效
0错误
0空行
逐行问题 计数包含所有行和错误。列表显示前 40 个错误,每行最多预览 120 个字符。
0
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

示例:订单日志里的雪花 ID

后端用 64 位整数做订单号时,数值常超过 253,在 JavaScript 里先 JSON.parse() 再 JSON.stringify() 会改掉末几位。本工具只用 JSON.parse() 检查语法,输出时数字照抄输入的字符:

{"order_id":1830000000000000001,"amount":88.50,"buyer":"张三"}
{"order_id":1830000000000000002,"amount":12.00,"buyer":"\u674e\u56db"}
[
  {
    "order_id": 1830000000000000001,
    "amount": 88.50,
    "buyer": "张三"
  },
  {
    "order_id": 1830000000000000002,
    "amount": 12.00,
    "buyer": "李四"
  }
]

先解析再序列化会得到 1830000000000000000 和 88.5。字符串按 JSON.stringify() 的标准写法输出,所以 "\u674e\u56db" 变成 “李四”;紧凑 JSONL 里逗号后的空格也会去掉。

反方向同样保留数字:

[
  {"order_id": 1830000000000000001, "amount": 88.50},
  {"order_id": 1830000000000000002, "amount": 12.00}
]
{"order_id":1830000000000000001,"amount":88.50}
{"order_id":1830000000000000002,"amount":12.00}

复制与下载

复制按钮和两个下载都取最近一次成功转换的结果。JSONL → JSON 之后,下载 .json 保存右侧的数组; JSONL 一侧的复制和下载 .jsonl 给出转换后的记录,每行一条、紧凑格式。它不是你粘贴的原文:被“只转换有效行”略过的错误行不在里面,空格也去掉了。 JSON → JSONL 之后,下载 .json 按当前“格式化 JSON 输出”设置保存你的数组。

第一次转换之前这些按钮不可用;编辑任一侧、切换“忽略空行”或“只转换有效行”、点击清除(或在工具内按 Ctrl+L / Cmd+L)、转换失败或读取文件失败时,它们会立即变为不可用。转换失败时输出一侧被清空,不会复制到属于旧输入的结果。自动校验本身不会让它们变为可用。切换“格式化 JSON 输出”时,若 JSONL 一侧有内容,会重新执行 JSONL → JSON。

JSONL 与 JSON 数组的区别

JSON 数组把所有记录包在一个大文档里。JSONL 把每条记录写成独立的一行 JSON 值。 这种按行组织的格式适合日志、流式导出、命令行处理和大数据集,每条记录都可以独立处理。

示例:三行导出数据里有一行坏了

把下面内容粘贴到 JSONL 面板,等待 350 毫秒自动校验:

{"id":1,"event":"signup"}
{"id":2,"event":"purchase",}
{"id":3,"event":"cancel"}

计数显示共 3 行、有效 2 行、错误 1 行、空行 0。问题面板列出第 2 行和浏览器的解析消息,Chrome 给出 Expected double-quoted property name in JSON at position 27 (line 1 column 28)(位置从该行行首算起),Firefox 与 Safari 的措辞不同。修好这一行或勾选只转换有效行之前,JSONL → JSON 会报错停止;勾选后输出第 1、3 条记录,提示「已将 2 条 JSONL 记录转换为 JSON 数组。」,下载 .jsonl 保存:

{"id":1,"event":"signup"}
{"id":2,"event":"purchase",}
{"id":3,"event":"cancel"}
{"id":1,"event":"signup"}
{"id":3,"event":"cancel"}

命令行等价写法

需要写进脚本时,用 jq 完成同样的转换(jq 1.7.1 实测输出):

jq -c '.[]' data.json > data.jsonl   # JSON 数组 → JSONL
jq -s '.' data.jsonl > data.json     # JSONL → JSON 数组
jq -c . bad.jsonl                    # 遇到第一处错误就停止:
# jq: parse error: Expected another key-value pair at line 2, column 28

jq 在第一处错误处停止;本工具逐行解析,一次列出所有出错的行。

限制

  • 重复键取最后一个值,与 JSON.parse() 相同:{"x":1,"x":2} 变成 {"x":2},位置在第一个 x 处。
  • 形如数组下标的键会移到对象最前面并按数值升序排列,与 JavaScript 对象一致:{"b":1,"2":2,"1":3} 变成 {"1":3,"2":2,"b":1},值不变。
  • JSON → JSONL 只接受顶层数组。对象或单个值会提示「JSON 输入必须是数组。」
  • 每条记录必须写在一行内。跨多行的格式化对象,它占的每一行都会报错。工具按换行符拆分并去掉每行首尾空白,Windows 的 CRLF 文件可以直接用。
  • 问题面板只列出前 40 个出错行,错误计数仍包含全部。

FAQ

什么是 JSONL?

JSONL 也叫 JSON Lines 或 NDJSON,每一行保存一个完整 JSON 值,常用于日志、数据导出、流式 API 和 AI 数据集。

哪些 JSON 输入可以转成 JSONL?

粘贴 JSON 数组即可。数组里的每一项会变成一行紧凑 JSONL,保留对象、数组、字符串、布尔值和 null;数字按你写的字符原样输出,1830000000000000001、1.50、1e-7 都不变。

空行如何处理?

默认忽略空行。关闭该选项后,空行会作为逐行校验问题显示。

可以只导出有效 JSONL 记录吗?

可以。勾选“只转换有效行”后点击 JSONL → JSON,JSON 数组里只有有效记录,“下载 .jsonl”按每行一条保存同样的记录。自动校验只检查各行,转换成功之前复制和下载按钮都不可用。

数据在哪里处理?

解析、校验、转换和文件导出都在你的浏览器内通过本地 JavaScript API 完成。