JSON vs JSONL:有什麼區別?

全面了解 JSON 和 JSONL(JSON Lines)格式、它們的差異以及何時使用的完整指南。

最後更新:2026 年 2 月

快速比較

特性JSONJSONL(JSON Lines)
結構單一物件或陣列每行一個 JSON 物件
副檔名.json.jsonl 或 .ndjson
解析必須解析整個檔案可逐行解析
串流困難原生支援
大型檔案處理記憶體密集記憶體高效
人類可讀性格式化並有縮排緊湊,每行一筆記錄
結構驗證支援 JSON Schema逐行 JSON Schema
追加資料必須重寫整個檔案直接追加新行

什麼是 JSON?

JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,易於人類閱讀和撰寫,也易於機器解析和生成。它基於 JavaScript 的子集,已成為網路資料交換的事實標準。

JSON 檔案包含單一 JSON 值 — 通常是物件或陣列。必須將整個檔案作為一個單元解析,才能存取其中的任何資料。

JSON 範例
[
{"name": "Alice", "age": 30, "city": "New York"},
{"name": "Bob", "age": 25, "city": "London"},
{"name": "Charlie", "age": 35, "city": "Tokyo"}
]

什麼是 JSONL(JSON Lines)?

JSONL(JSON Lines),也稱為 Newline Delimited JSON(NDJSON),是一種文字格式,每行都是有效的 JSON 物件。行之間以換行符(\n)分隔。與標準 JSON 不同,資料外沒有包裹陣列或物件。

JSONL 檔案中的每一行都是自成一體的,可以獨立解析。這使得 JSONL 非常適合串流資料、日誌檔案和處理大型資料集,而無需將所有內容載入記憶體。

JSONL 範例
{"name": "Alice", "age": 30, "city": "New York"}
{"name": "Bob", "age": 25, "city": "London"}
{"name": "Charlie", "age": 35, "city": "Tokyo"}

JSON 和 JSONL 的主要區別

1. 檔案格式與結構

JSON

JSON 將所有資料包裹在單一物件或陣列中。檔案必須整體上是語法正確的 — 末尾缺少一個括號就會使整個檔案失效。

JSONL

JSONL 每行儲存一個 JSON 物件。每行都是獨立的 — 如果某行有錯誤,其他行仍然可以被解析。

2. 解析與記憶體使用

JSON

JSON 需要一次性載入和解析整個檔案。1GB 的 JSON 檔案大約需要 1GB 以上的記憶體來解析。

JSONL

JSONL 可以逐行讀取和解析(串流處理)。即使是 10GB 的 JSONL 檔案,也可以透過逐行讀取,以最少的記憶體進行處理。

3. 串流與即時資料

JSON

JSON 不是為串流設計的。在接收和解析整個檔案或回應之前,您無法開始處理資料。

JSONL

JSONL 非常適合串流處理。每行一收到就可以立即處理,非常適合即時資料饋送、日誌和伺服器推送事件。

4. 追加和寫入資料

JSON

向 JSON 陣列追加資料需要讀取整個檔案、解析它、新增元素,然後重寫完整的檔案。

JSONL

向 JSONL 檔案追加資料只需在末尾新增一行。無需讀取或修改現有資料。這是 O(1) vs JSON 的 O(n)。

5. 人類可讀性

JSON

JSON 支援帶縮排的美化列印,使其非常適合設定檔和 API 回應的可讀性。

JSONL

JSONL 在設計上是緊湊的 — 每行一筆記錄。它針對機器處理進行了最佳化,而非人類閱讀,但各行可以單獨美化列印。

何時使用 JSON vs JSONL

JSON使用 JSON 的時機:
  • 處理設定檔
  • 建構 REST API 請求/回應主體
  • 儲存小型結構化資料(10MB 以下)
  • 資料需要人類可讀且可編輯
  • 處理巢狀階層式資料結構
  • 瀏覽器端的資料交換
JSONL使用 JSONL 的時機:
  • 處理大型資料集(100MB 以上)
  • 即時串流資料
  • 寫入日誌檔案和事件資料
  • 訓練機器學習模型(OpenAI、Hugging Face)
  • ETL 管線和資料處理
  • 頻繁追加資料
  • 使用 Unix 工具(grep、awk、sed)處理資料

常見使用情境

機器學習與 AI

JSONL

JSONL 是機器學習訓練資料的標準格式。OpenAI 使用 JSONL 進行微調資料集,許多機器學習框架都需要 JSONL 輸入。每行代表一個訓練範例。

應用程式日誌

JSONL

伺服器日誌、應用程式事件和稽核記錄非常適合使用 JSONL。每個事件寫為單獨一行,使其易於追加、使用 grep 搜尋和串流工具處理。

Web API 與設定

JSON

REST API 通常使用 JSON 作為請求和回應主體。設定檔(.json)使用 JSON 來提供可讀的、帶巢狀物件的結構化設定。

大數據與分析

JSONL

資料管線、ETL 流程和分析工具使用 JSONL 來處理大量資料。每筆記錄都可以獨立處理,支援平行處理和 MapReduce 模式。

程式碼範例

在 JavaScript 中讀取 JSON
// Reading JSON - must load entire file
const data = JSON.parse(fs.readFileSync('data.json', 'utf8'));
// Access data
data.forEach(item => {
console.log(item.name);
});
在 JavaScript 中讀取 JSONL
// Reading JSONL - stream line by line
import { createReadStream } from 'fs';
import { createInterface } from 'readline';
const rl = createInterface({
input: createReadStream('data.jsonl')
});
for await (const line of rl) {
const item = JSON.parse(line);
console.log(item.name);
}
將 JSON 轉換為 JSONL
// JSON array to JSONL
const jsonArray = JSON.parse(fs.readFileSync('data.json', 'utf8'));
const jsonl = jsonArray
.map(item => JSON.stringify(item))
.join('\n');
fs.writeFileSync('data.jsonl', jsonl);
將 JSONL 轉換為 JSON
// JSONL to JSON array
const lines = fs.readFileSync('data.jsonl', 'utf8')
.split('\n')
.filter(line => line.trim());
const jsonArray = lines.map(line => JSON.parse(line));
fs.writeFileSync('data.json', JSON.stringify(jsonArray, null, 2));

線上轉換 JSON 與 JSONL

使用我們免費的線上工具,即時在 JSON 和 JSONL 格式之間轉換——無需安裝。

試用我們的 JSONL 檢視器

在瀏覽器中即時檢視和編輯高達 1GB 的 JSONL 檔案。無需上傳、無需註冊。

常見問題

JSON vs JSONL:有什麼區別?完整指南