JSONL 格式化

在这里粘贴 JSONL 或 NDJSON,空行会自动忽略,每条数据行都必须是一个完整 JSON 对象。

格式化结果会显示在这里。

每一条非空行都应该是一段完整的 JSON 对象。

总行数: 1非空行: 0合法行: 0非法行: 0
粘贴 JSONL 后会立即开始格式化。

一个面向日志、会话归档和流式导出的轻量 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 或数据库导入

使用方法

  1. 把 JSONL 或 NDJSON 内容粘贴到输入区,保证每一条非空行都是一个独立 JSON 对象
  2. 右侧会立即按行格式化,并在坏行处提示具体行号、错误信息和原始记录
  3. 根据提示修复对应行,直到非法行数量归零
  4. 确认全部合法后,再复制完整的格式化结果,或继续把数据送去下游脚本、导入器和分析流程

功能特点

  • 逐行解析 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