NDJSON 是每行一个 JSON 值,这就是整个格式。它的存在是因为读取器可以 处理一行然后忘记它,这使得日志文件或大型导出可以在单个巨大数组无法 做到时实现流式传输:无需一次将整个文档保存在内存中。
使用 JSON 到 NDJSON 转换器
选择方向并点击转换。转换为 NDJSON 需要一个数组,因为这是值序列的 JSON 形式;每行允许任何元素类型,不仅仅是对象。
[{"id": 12345678901234567890}, "plain string", 42, null]
变成:
{"id":12345678901234567890}
"plain string"
42
null
每个元素获得自己的行,经过压缩,二十位的 id 保留所有数字,因为
两个方向都通过令牌流而非 JSON.parse。
空行
完全空的行被跳过而不是被视为错误。几乎所有真实的 NDJSON 文件都以 尾随换行符结尾,严格来说这意味着最后一行是空的,因此在空行上 失败会拒绝几乎所有人实际拥有的文件。该工具报告跳过了多少行以及 写了多少记录,因为发现文件一半为空是值得了解的。
回读,以及损坏的行告诉你什么
将 NDJSON 转换为 JSON 会单独验证每行,并按文件实际具有的行号报告 失败。给定
{"a":1}
{"a":2}
{"a":}
{"a":4}
失败报告在第 3 行,而不是第 1 行或文件末尾,因此你可以直接定位到 千行文件中的损坏记录而无需计数。
每行严格一个值
单行上的两个 JSON 值不是 NDJSON,即使宽容的解析器可能意外接受它。 本工具拒绝它,因为静默接受它意味着根据实际规范构建的下游读取器 与本工具写入的内容不一致。如果你需要每个记录可读地缩进,请在 转换回普通数组后对结果使用 JSON 格式化器; NDJSON 行有意保持不缩进,因为值内的换行会结束记录。