JSONL 行数统计器
统计 JSONL 物理行,检查语法与 UTF-8 字节大小
浏览器本地处理;不自动保存输入。输入最多 1 MiB。
粘贴或编辑时,浏览器可能将 CRLF 和孤立 CR 转成 LF;此时字节数基于文本框内容。需要核对文件原始字节时,请读取 UTF-8 文件并保持未编辑;文件 BOM 会保留用于检查。
按 LF 分行,CRLF 视为一个分隔符。末尾换行只终止上一行;连续换行仍产生空记录。孤立 CR 不分行。UTF-8 行大小不含分隔符。
JSON Lines 不允许 BOM 和空白记录。忽略空行仅改变统计,不能使源文件变为全部有效。最多 20,000 行,每行最多 64 层及 20,000 个结构标记;超限显示未检查完。数值精度、重复键、Schema 和业务规则不在语法检查范围内。
输入或选项改变后,请重新处理以生成当前结果。
完整说明还包括常见问题处理、操作示例、代码片段、FAQ 和相关工具,便于核对结果或排查问题。
工具说明
在导入日志或测试数据前检查逐行 JSON。工具按 LF 分行,将 CRLF 视为一个分隔符;末尾换行只终止上一条记录,不凭空增加空记录。结果分别列出物理行、参与统计的记录、空白与忽略行、语法检查结果,以及不含分隔符的 UTF-8 行字节最小值、平均值和最大值。输入总字节包含分隔符。忽略空行只改变统计,不会让原文件符合 JSON Lines。语法检查接受 JSON 标量,不证明数字精度、重复键语义、Schema 或业务规则正确。最多在本地分析 1 MiB、20,000 行,不自动保存原文。 粘贴或编辑可能将 CRLF 及孤立 CR 转为 LF。核对原始字节时请读取 UTF-8 文件并保持文本未编辑;文件 BOM 字节会保留。
场景配方
导入前定位真正的空记录
目标:区分末尾终止换行与空白记录。
- 粘贴 {"id":1},中间留一空行,再粘贴 {"id":2},最后保留一个换行。
- 开启 JSON 语法检查,关闭忽略空行;确认三条物理行、两条语法有效记录、一条空白行,最小行大小为零。
- 复制空行原文或下载报告,在源文件移除该行后复查;末尾换行可以保留。
结果:修正后的源文件有两条物理记录,不含空白 JSON Lines 记录。
生产可用片段
终止符不等于新增记录
text
使用可见分隔标记表示输入:
{"id":1}<CR><LF>
<LF>
"😀"<LF>
物理行:3
语法有效值:2;空白行:1
行字节:8、0、6
记录字节:14;分隔字节:4;输入字节:18失败门诊(高频踩坑)
行数和换行符数量不一致
原因:末尾换行终止一条记录,连续换行才产生空记录。
修复:按工具说明的分隔规则比较物理行,不直接把分隔字符数当成记录数。
很大的数值通过语法检查
原因:这是语法计数器,不是保留十进制精度的转换器。
修复:在使用大 ID 或精确小数前,用合适的数值解析器和 Schema 另行检查。
关闭了语法检查
原因:工具仅测量字节,没有解析值。
修复:结果应视为未检查;判断 JSONL 导入准备情况前请重新启用语法检查。
粘贴后的字节数与文件不同
原因:浏览器文本框可能把 CRLF 和孤立 CR 归一为 LF。
修复:需要比较字节或换行时,读取原始 UTF-8 文件并保持未编辑。编辑后切换为文本框归一化内容。
常见问题
末尾换行会多算一条记录吗?
不会。{} 后跟一个 LF 仍是一条记录,连续两个 LF 才产生一条空记录。CRLF 是一个分隔符,孤立 CR 不会分行。
字节大小包含哪些内容?
每行按 UTF-8 计算,不包含 LF 或 CRLF 分隔符;输入总字节包含全部分隔符。例如 😀 占 4 个 UTF-8 字节,但占 2 个 UTF-16 码元。 核对原始文件字节时请使用 UTF-8 文件读取并保持未编辑;粘贴或编辑可能把 CRLF 及孤立 CR 转成 LF。
忽略空行后就变成合法 JSONL 了吗?
不是。仅从记录统计和语法计数中排除纯空白行,物理位置和空白行数仍保留,源文件不会被标为全部有效。
语法通过能保证数字精度和键唯一吗?
不能。1e400 等大数可以在语法上合法,重复键也能解析。数值可表示性、键唯一性、Schema 和应用语义需要另外检查。
BOM 或很复杂的记录如何处理?
行首 BOM 会显示诊断。单行超过 64 层或 20,000 个结构标记时显示未检查完,不会当作语法有效。
能复制完整的错误行吗?
可以。最多显示 100 个诊断,每条预览前 200 个码元,行复制使用完整原文,空行复制的也是空字符串。报告在本地下载,不自动保存输入。
继续浏览