JSONL 转换器
在浏览器中将 JSONL 和 NDJSON 转为 JSON 数组,也可将 JSON 数组转回 JSON Lines,逐行校验并导出有效记录。雪花 ID 等大数字按原样保留。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
示例:订单日志里的雪花 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 完成。