JSONL vs NDJSON:有什麼區別?

完整指南比較 JSONL(JSON Lines)和 NDJSON(Newline Delimited JSON)——兩個幾乎相同格式的名稱,但有值得了解的微妙差異。

最後更新:2026 年 2 月

快速比較:JSONL vs NDJSON

功能JSONL(JSON Lines)NDJSON
完整名稱JSON LinesNewline Delimited JSON
副檔名.jsonl.ndjson
規格jsonlines.org(非正式)github.com/ndjson/ndjson-spec(非正式規格)
來源社群慣例,由資料科學工具推廣由 Chris Olah、Thorsten Ball 等人提出
行分隔符\n(換行符)\n(換行符)
MIME 類型application/jsonl(非官方)application/x-ndjson
串流支援是,逐行是,逐行
採用情況OpenAI、Hugging Face、ML/AI 生態系統Elasticsearch、Apache Spark、資料工程

什麼是 JSONL(JSON Lines)?

JSONL 是 JSON Lines 的縮寫,是一種基於文字的資料格式,其中每一行包含一個有效的 JSON 值。行之間以換行符(\n)分隔。該格式由機器學習和資料科學社群推廣,並在 jsonlines.org 上非正式定義。

JSONL 檔案使用 .jsonl 副檔名。該格式已成為 AI 和 ML 訓練資料的標準——OpenAI 要求使用 .jsonl 檔案進行微調,Hugging Face 資料集通常使用 JSON Lines 格式。

data.jsonl
{"id": 1, "text": "Hello world", "label": "greeting"}
{"id": 2, "text": "How are you?", "label": "question"}
{"id": 3, "text": "Goodbye", "label": "farewell"}

什麼是 NDJSON(Newline Delimited JSON)?

NDJSON,即 Newline Delimited JSON,是一種資料格式,其中每一行是一個有效的 JSON 值,以換行符分隔。該規格託管於 github.com/ndjson/ndjson-spec,旨在為換行符分隔的 JSON 資料提供更結構化的標準。

NDJSON 檔案使用 .ndjson 副檔名,並具有已註冊的 MIME 類型 application/x-ndjson。該格式在資料工程、日誌處理和串流應用程式中被廣泛採用——Elasticsearch、Apache Spark 和許多 HTTP 串流 API 都使用 NDJSON。

data.ndjson
{"id": 1, "text": "Hello world", "label": "greeting"}
{"id": 2, "text": "How are you?", "label": "question"}
{"id": 3, "text": "Goodbye", "label": "farewell"}

JSONL 和 NDJSON 是相同的格式嗎?

在實踐中,是的——JSONL 和 NDJSON 在功能上是相同的格式。兩者都將每行儲存一個 JSON 值,以換行符(\n)分隔。具有相同資料的 .jsonl 檔案和 .ndjson 檔案是完全可以互換的,任何能讀取其中一種格式的工具都可以讀取另一種格式。

差異純粹在於命名、社群採用和中繼資料慣例。JSONL(JSON Lines)源自資料科學和機器學習社群,而 NDJSON(Newline Delimited JSON)由資料工程和網路串流社群正式化。可以把它想像成「電影」與「影片」——同樣的東西,不同圈子的不同命名偏好。

最有意義的區別是副檔名(.jsonl vs .ndjson)和 MIME 類型。NDJSON 具有更廣泛認可的 MIME 類型(application/x-ndjson),用於 HTTP 串流上下文,而 JSONL 檔案是 AI/ML 工作流程中的標準。在選擇時,遵循您生態系統的慣例。

JSONL 和 NDJSON 之間的主要區別

1. 規格與權威性

JSONL

在 jsonlines.org 上定義,具有簡潔的非正式規格。規格很直接:每一行是一個有效的 JSON 值,行之間以 '\n' 分隔,建議使用 UTF-8 編碼。

NDJSON

在 github.com/ndjson/ndjson-spec 上定義,具有稍微正式的規格。NDJSON 明確要求每一行是有效的 JSON 值,行分隔符是 '\n'(而不是 '\r\n'),建議使用尾隨換行符。

2. 副檔名

JSONL

使用 .jsonl 副檔名。這是 OpenAI 微調檔案、Hugging Face 資料集和大多數 ML/AI 工具的標準。GitHub 和 VS Code 可以識別 .jsonl 檔案並提供語法高亮。

NDJSON

使用 .ndjson 副檔名。這在資料工程工具、Elasticsearch bulk API 和串流 HTTP 回應中很常見。許多編輯器也支援 .ndjson 語法高亮。

3. MIME 類型

JSONL

沒有正式註冊的 MIME 類型。常見的非官方類型包括 application/jsonl 和 application/json-lines。在實踐中,許多系統使用 application/jsonl 或回退到 application/json。

NDJSON

使用 application/x-ndjson 作為其 MIME 類型。這在 HTTP 上下文中更被廣泛認可,並被 Elasticsearch、Fetch API 串流標準和各種 Web 框架用於串流回應。

4. 社群與生態系統採用

JSONL

在 AI/ML 生態系統中佔主導地位。OpenAI、Anthropic、Google Gemini、Hugging Face 和大多數 ML 框架使用 .jsonl。術語「JSONL」在開發者社群中被更廣泛搜尋和認可。

NDJSON

在資料工程和後端系統中更受青睞。Elasticsearch、Apache Spark、PostgreSQL COPY 和許多日誌聚合工具使用 NDJSON。ndjson npm 套件每週有數百萬次下載。

何時使用 JSONL vs NDJSON

JSONL何時使用 .jsonl:
  • 為 OpenAI、Anthropic 或其他 LLM 微調準備訓練資料
  • 使用 Hugging Face 資料集
  • 建置 ML 管線和資料前處理
  • 您的團隊或文件提到「JSON Lines」
  • 上傳檔案到期望 .jsonl 副檔名的 AI/ML 平台
  • 在 Python 資料科學環境中工作
NDJSON何時使用 .ndjson:
  • 透過 HTTP 串流 JSON 資料(Server-Sent Events、fetch 串流)
  • 使用 Elasticsearch bulk API
  • 使用 Apache Spark 或類似工具建置資料管線
  • 設定 Content-Type 標頭(application/x-ndjson)
  • 您的基礎設施或團隊使用 NDJSON 慣例
  • 使用 Node.js 串流函式庫

程式碼範例:讀取 JSONL 和 NDJSON

讀取 .jsonl 檔案(Python)
# 讀取 JSONL - 與讀取 NDJSON 完全相同
import json
with open('data.jsonl', 'r') as f:
for line in f:
record = json.loads(line.strip())
print(record['text'])
# 輸出:
# Hello world
# How are you?
# Goodbye
讀取 .ndjson 檔案(JavaScript/Node.js)
// 讀取 NDJSON - 與讀取 JSONL 完全相同
import { createReadStream } from 'fs';
import { createInterface } from 'readline';
const rl = createInterface({
input: createReadStream('data.ndjson')
});
for await (const line of rl) {
const record = JSON.parse(line);
console.log(record.text);
}
// 輸出:
// Hello world
// How are you?
// Goodbye

驗證您的 JSONL / NDJSON 檔案

檢查您的 .jsonl 或 .ndjson 檔案格式是否正確。我們的免費驗證器可逐行檢查 JSON 語法。

即時檢視 JSONL 和 NDJSON 檔案

在瀏覽器中開啟高達 1GB 的 .jsonl 和 .ndjson 檔案。無需上傳,無需註冊——無縫支援兩種格式。

常見問題

JSONL vs NDJSON — 它們一樣嗎?主要差異 | jsonl.co