JSONL 格式化
格式化结果会显示在这里。
每一条非空行都应该是一段完整的 JSON 对象。
一个面向日志、会话归档和流式导出的轻量 JSONL 格式化页面。左侧粘贴换行分隔的 JSON 对象,右侧立即预览每条记录的格式化结果,并直接看到哪一行坏了。
相关推荐
什么是 JSONL 格式化?
JSONL(JSON Lines)是一种按行组织 JSON 记录的文本格式。它的核心特点不是“长得像 JSON”,而是“每一条记录独立占一行”。在实际工程里,这几乎总是表现为“每一非空行都是一个完整 JSON 对象”,对象之间用换行符分隔,而不是再额外包一层 `[{...},{...}]` 的大数组。
这种组织方式特别适合日志、事件流、会话归档、批量导出和流式处理。因为程序不需要先把整个文件读进内存,只要按行读取就能逐条消费记录。某一行坏了,也能直接定位到对应行号,而不是在一个超长 JSON 数组里盲目数括号、找逗号。
JSONL 格式化和普通 JSON 格式化不是一回事。普通 JSON 格式化器假设输入是一整份完整 JSON 文档;JSONL 格式化器则必须逐行解析、逐行校验、逐行报错,还要保留换行分隔的记录语义。对日志和导出文件来说,这种差异非常关键。
这个页面就是围绕这种真实语义设计的:左侧输入换行分隔的对象记录,右侧按记录展示格式化结果,同时把坏行、截断行和非对象行直接指出来。这样你在排查 `.jsonl` 文件时看到的是“哪条记录有问题”,而不是笼统地得到一个 `SyntaxError`。
适用场景
- 把应用日志导出的 JSONL 按条美化后再逐字段排查问题,而不是盯着一长串压成一行的对象发呆
- 检查像 `/Users/sunliquan/.codex/archived_sessions/*.jsonl` 这类会话归档文件,确认每一行事件对象都完整可读
- 在数据管道、埋点平台或 Elasticsearch bulk 导出失败时,快速定位到底是哪一行 JSON 对象写坏了
- 调试流式输出接口时,确认服务端是否真的按照“每行一个对象”持续产出,而不是把半截对象提前刷出
- 把终端、监控面板或云日志平台复制出来的 NDJSON 粘进来,先整理结构再继续排查
- 检查 AI 生成的逐行对象结果是否某一行混入了数组、字符串或不完整 JSON
- 在导入 ClickHouse、BigQuery、Kafka Connect 等依赖行级记录的流程前,先人工复核 JSONL 内容
- 审查审计日志、风控事件或埋点事件流时,逐条看对象结构是否稳定一致
- 当 JSONL 文件被截断或下载不完整时,快速看到最后哪一条对象没有闭合
- 把内部工具导出的 line-delimited JSON 先格式化,再发给同事做代码审查或数据核对
- 在写脚本解析 JSONL 之前,先人工确认字段层级、嵌套对象和数组位置,减少脚本调试时间
- 处理混杂空行和坏行的历史导出文件时,先过滤结构问题再决定是否继续转换成 CSV 或数据库导入
使用方法
- 把 JSONL 或 NDJSON 内容粘贴到输入区,保证每一条非空行都是一个独立 JSON 对象
- 右侧会立即按行格式化,并在坏行处提示具体行号、错误信息和原始记录
- 根据提示修复对应行,直到非法行数量归零
- 确认全部合法后,再复制完整的格式化结果,或继续把数据送去下游脚本、导入器和分析流程
功能特点
- 逐行解析 JSONL / NDJSON,不需要先手动包成 `[{...},{...}]` 这种完整 JSON 数组
- 按“每一非空行都是一个 JSON 对象”的真实文件语义校验,贴合日志、事件流、会话归档等常见数据形态
- 左右分栏布局:左侧 `textarea` 输入,右侧即时展示格式化结果,适合边修边看
- 坏行会直接标出具体行号、解析错误和原始内容,方便快速修复截断记录、缺失括号和拼接错误
- 只在全部非空行都合法时开放复制,避免把部分成功、部分损坏的数据继续传给下游流程
- 内置总行数、非空行、合法行、非法行统计,适合快速判断大文件到底坏了几条记录
- 提供示例数据,首次打开就能直接试用 JSONL 格式化效果
- 全部处理都在浏览器本地完成,日志、会话事件和接口导出内容不会上传
JSONL 格式化 vs JSON 格式化 vs JSON 修复
这几个工具经常连着用,但解决的问题并不一样。选对入口会快很多。
| 工具 | 最适合的输入 | 核心能力 | 适用场景 |
|---|---|---|---|
| JSONL 格式化 | 每行一个 JSON 对象 | 按记录逐行校验与美化 | 日志、NDJSON、会话归档、流式导出 |
| JSON 格式化 | 一个完整 JSON 对象或数组 | 美化整份 JSON 文档 | API 响应、配置文件、单次 payload |
| JSON 修复 | 有语法错误或不标准的 JSON 文本 | 先修语法再交给后续工具 | 尾逗号、注释、引号问题、截断 JSON |
最佳实践
调试时尽量保持原始 JSONL 形态,不要为了看懂先手工包成数组
如果下游系统原本吃的是 JSONL,就尽量在原始“每行一条记录”的形态下排查。先包成数组虽然能丢给普通 JSON 格式化器,但会丢失原始行号语义,也更难对应真实坏行位置。
大文件优先看最后几行
很多 JSONL 文件不是中间结构错,而是最后几行因为流中断、下载失败或写入未完成而被截断。先看尾部几条记录,通常比从头翻完整文件更快。
如果输入本身带单引号、注释或 JSON5 风格,先走 JSON 修复更省时间
JSONL 格式化页强调的是逐行对象校验;如果源数据先天就不是标准 JSON,先修再格式化通常比在长文件里手工逐行改更高效。
准备重新导入时,务必保留一行一个对象的传输语义
右侧的多行美化块更适合人看,但如果你接下来要把数据重新写回日志系统、消息队列或导入器,记得保留源数据的一行一对象结构,而不是把预览形态直接当最终传输格式。
把行号当作主线索,而不是全文件肉眼通读
真正排查时,最快的方法通常是先锁定坏行号,再把这一条和前后相邻合法记录对比。这样能更快看出是缺括号、缺引号、字段被截断,还是某个对象混进了错误类型。
常见问题
JSON 和 JSONL 有什么区别?
普通 JSON 通常是一整个对象或数组,要作为一个完整文档整体解析;JSONL(JSON Lines,也常叫 NDJSON)则是一行一条独立记录,工程实践里最常见的是“一行一个 JSON 对象”。它更适合日志、事件流、流式处理和批量导入,因为可以逐行读取、逐行写入、逐行定位错误。
这个页面为什么强调“每行一个 JSON 对象”?
因为真实世界里大多数 JSONL 文件就是这么组织的,尤其是日志、会话归档、事件流和导出文件。你给的归档样本也是典型形式:每一行都是一个对象,用换行符分隔。页面按这个语义校验,比宽泛接受任意 JSON 值更符合实际调试场景。
JSONL 和 `[{...},{...}]` 这种 JSON 数组有什么不同?
JSON 数组是一个完整 JSON 文档,必须整体读完再解析;JSONL 则把每条对象拆成独立的行记录,可以流式读取,也更容易在某一条出错时直接定位到对应行。对于大日志文件和事件流来说,JSONL 比整包数组更适合处理。
空行为什么会被忽略?
空行通常来自复制粘贴、日志轮转或手工编辑,不代表真正的数据记录。忽略空行可以减少噪音,同时仍然严格检查所有包含内容的数据行。
如果某一行是数组、字符串或 `null` 会怎样?
这个页面会把它判定为非法行,因为这里的目标格式是“每一非空行都是一个 JSON 对象”。如果你的数据确实需要逐行存储数组或原始值,那说明它不是这个页面当前优化的典型 JSONL 日志场景。
为什么有一条坏行时不能直接复制全部结果?
这是刻意保持保守的交互。只有当全部非空行都合法时才允许复制,避免把部分成功、部分损坏的结果继续传给下游导入器、脚本或同事,省掉二次排查成本。
它能帮我发现被截断的日志文件吗?
可以。很多 JSONL 问题都发生在最后几行,比如对象少了 `}`、字符串少了结束引号、网络流中途断掉。页面会把对应坏行直接暴露出来,尤其适合排查下载不完整和流式输出中断。
JSONL 和 NDJSON 是一回事吗?
在绝大多数工程语境里可以当成同义词。两者都表示用换行分隔的 JSON 记录,只是命名习惯不同。
格式化 JSONL 时会上传我的数据吗?
不会。所有解析、校验和格式化都只在浏览器本地执行,日志、接口返回、会话归档和数据导出内容都不会发到服务器。
什么时候该用普通 JSON 格式化,而不是 JSONL 格式化?
如果你的输入本身是一个完整 JSON 对象或一个数组,比如 API 响应体、配置文件、`[{...},{...}]` 这种数据包,就该用普通 JSON 格式化页;只有在输入是按换行拆开的逐条对象记录时,才更适合这个 JSONL 格式化页。
术语表
- JSONL
- 一种按行分隔 JSON 记录的文本格式。最常见的工程写法是每一条非空行都是一个完整 JSON 对象。
- JSON Lines
- JSONL 的全称与另一种常见叫法,通常与 JSONL 视为同义。
- NDJSON
- Newline Delimited JSON,直译为“换行分隔的 JSON”。在大多数日志和数据管道场景中与 JSONL 基本等价。
- 逐行记录
- 每一行都代表一条完整记录的数据布局,适合流式写入、流式读取和按行定位错误。
- Pretty Print / 美化格式化
- 把压缩的一行 JSON 重新排成带缩进和换行的可读结构,方便人工查看字段层级。
- 坏行
- 某一行不是合法 JSON,或虽然能解析但不符合预期结构(例如不是对象),因此不能作为有效 JSONL 记录。
- 截断流
- 日志或导出在传输、刷新或保存过程中被中途截断,导致最后一条记录没有完整闭合。
- JSON 数组
- 标准 JSON 中用 `[` 和 `]` 包起来的一整个集合,例如 `[{...},{...}]`。它与 JSONL 不同,必须作为一个整体文档来解析。
Authoritative References
- jsonlines.orgJSON Lines 官方说明
- IETFJSON 官方规范 RFC 8259
- JSON 压缩
- CSV 转 JSON
- JSON 转 CSV
- JSON Diff
- JSON Escape / Unescape
- JSON扁平化
- JSON 格式化
- JSONL 格式化
- JSON 生成器
- JSONPath 查询
- JSON 合并
- JSON 修复
- JSON Schema 校验
- JSON 排序
- JSON Stringify
- JSON 转 HTML
- JSON 转 Java
- JSON 转 Markdown
- JSON 转 SQL
- JSON 转 TOML
- JSON 转 TypeScript
- XML 转 JSON
- JSON 转 XML
- YAML 转 JSON
- JSON 转 YAML
- JSON 转 Python
- JSON 转 Go
- JSON 转 Rust
- JSON 转 Swift
- JSON 转 C#
- JSON 转 C++
- JSON 转 PHP