什麼是 JSONL?JSON Lines 格式完整指南

關於 JSON Lines 您需要知道的一切 — 語法、範例、使用情境和最佳實踐。

最後更新:2026 年 2 月

什麼是 JSONL?

JSONL(JSON Lines),也稱為 Newline Delimited JSON(NDJSON),是一種基於文字的資料格式,每行都是有效的 JSON 值,以換行符分隔。與標準 JSON 將資料包裹在單一陣列或物件中不同,JSONL 每行儲存一筆記錄。

這種簡潔的設計使 JSONL 非常適合串流處理、日誌記錄和大型資料集處理 — 每行都可以獨立讀取、解析和處理,無需將整個檔案載入記憶體。

此格式因處理大量資料的工具和平台而普及,包括 OpenAI(用於微調資料集)、BigQuery、Apache Spark 和日誌管理系統。

JSONL 語法規則

JSONL 格式遵循幾條簡單的規則:

  • 每行必須是有效的 JSON 值(物件、陣列、字串、數字、布林值或 null)
  • 行之間以換行符(\n)分隔
  • 行與行之間沒有逗號或分隔符
  • 檔案必須使用 UTF-8 編碼
  • 檔案末尾的換行符為選填
  • 大多數解析器會忽略空行
有效的 JSONL 檔案
{"name":"Alice","age":30,"city":"New York"}
{"name":"Bob","age":25,"city":"London"}
{"name":"Charlie","age":35,"city":"Tokyo"}

注意:每行都是完整、獨立的 JSON 物件。行與行之間沒有逗號,也沒有外部包裹陣列。

JSONL 範例

簡單物件
{"id":1,"name":"Alice","email":"alice@example.com"}
{"id":2,"name":"Bob","email":"bob@example.com"}
{"id":3,"name":"Charlie","email":"charlie@example.com"}
巢狀物件
{"user":{"name":"Alice","age":30},"scores":[95,87,92]}
{"user":{"name":"Bob","age":25},"scores":[88,91,76]}

JSONL 的每行不必是相同類型 — 每行只需要是有效的 JSON:

混合類型
{"event":"login","user":"alice","timestamp":"2026-01-15T10:30:00Z"}
{"event":"purchase","user":"alice","amount":29.99,"items":["book","pen"]}
{"event":"logout","user":"alice","timestamp":"2026-01-15T11:45:00Z"}

JSONL 最熱門的用途之一是用於 OpenAI 微調資料集:

PopularOpenAI 微調格式
{"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is JSONL?"},{"role":"assistant","content":"JSONL is a text format where each line is a valid JSON value."}]}
{"messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"How do I read a JSONL file?"},{"role":"assistant","content":"Read the file line by line, parsing each line as JSON."}]}

如何讀取 JSONL 檔案

JSONL 檔案可以使用任何支援逐行文字處理的工具來讀取。以下是最常見的方法:

使用標準 Unix 工具檢查 JSONL 檔案:

命令列
# View first 5 lines
head -n 5 data.jsonl
# Count total lines (records)
wc -l data.jsonl
# Pretty-print each line with jq
cat data.jsonl | jq .
# Filter by field value
cat data.jsonl | jq 'select(.age > 30)'

Python 內建的 json 模組原生支援 JSONL:

Python
import json
with open('data.jsonl', 'r') as f:
for line in f:
record = json.loads(line)
print(record['name'])

在 Node.js 中逐行讀取 JSONL 檔案:

JavaScript / Node.js
import { createReadStream } from 'fs';
import { createInterface } from 'readline';
const rl = createInterface({
input: createReadStream('data.jsonl')
});
for await (const line of rl) {
const record = JSON.parse(line);
console.log(record.name);
}

線上 JSONL 檢視器

如需視覺化方式,使用 jsonl.co 開啟和瀏覽高達 1GB 的 JSONL 檔案 — 無需上傳,所有操作都在您的瀏覽器中進行。

如何建立 JSONL 檔案

建立 JSONL 檔案非常簡單 — 只需每行寫入一個 JSON 值。

Python
import json
records = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
{"name": "Charlie", "age": 35},
]
with open('output.jsonl', 'w') as f:
for record in records:
f.write(json.dumps(record) + '\n')
JavaScript / Node.js
import { writeFileSync } from 'fs';
const records = [
{ name: 'Alice', age: 30 },
{ name: 'Bob', age: 25 },
{ name: 'Charlie', age: 35 },
];
const jsonl = records
.map(r => JSON.stringify(r))
.join('\n');
writeFileSync('output.jsonl', jsonl + '\n');

可以在 JSONL 中新增註解嗎?

不行。JSONL 規格不支援註解。JSONL 檔案中的每一行都必須是有效的 JSON 值 — 而 JSON 本身沒有註解語法。

如果您需要在資料中包含中繼資料或註解,常見的替代方案包括:

  • 1在 JSON 物件中新增中繼資料欄位:'{'"_comment": "test data", "name": "Alice"'}'
  • 2在 JSONL 檔案旁使用獨立的中繼資料檔案
  • 3將中繼資料作為檔案的第一行:'{'"_meta": '{'"version": "1.0", "created": "2026-01-15"'}''}'

請記住,任何「註解」欄位都會被解析為一般資料。使用 JSONL 檔案的應用程式應設計為忽略中繼資料欄位。

JSONL vs JSON

關鍵區別在於結構。JSON 將所有內容包裹在單一值中,而 JSONL 每行儲存一個值。

JSON標準 JSON
[
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
JSONLJSONL(JSON Lines)
{"name":"Alice","age":30}
{"name":"Bob","age":25}
  • JSON 必須完全載入記憶體才能解析;JSONL 可以逐行讀取
  • JSON 元素之間需要逗號;JSONL 使用換行符
  • JSON 更適合設定檔和 API;JSONL 更適合大型資料集和串流
  • 向 JSON 追加資料需要重寫整個檔案;JSONL 只需追加新行

如需詳細比較,請查看我們的完整 JSON vs JSONL guide.

常見使用情境

機器學習與 AI

最熱門

JSONL 是機器學習訓練資料的標準格式。OpenAI、Hugging Face 和其他 AI 平台使用 JSONL 進行微調資料集,因為每個訓練範例都是獨立的一行,可以高效地進行洗牌、抽樣和串流處理。

日誌檔案與事件串流

JSONL

結構化日誌系統(ELK Stack、Datadog、CloudWatch)以 JSONL 格式輸出日誌。每個日誌項目佔一行 JSON,使其易於追加新項目並即時處理日誌。

大數據處理

JSONL

Apache Spark、BigQuery 和 AWS Athena 等工具原生支援 JSONL。逐行格式允許在分散式系統中進行平行處理 — 每個工作節點可以獨立處理一批行。

串流 API

JSONL

傳回大量結果集的 API 通常使用 JSONL 串流。用戶端可以在結果到達時立即開始處理,無需等待完整回應。

JSONL 副檔名

JSONL 檔案通常使用以下副檔名:

.jsonl標準 JSONL 副檔名,使用最廣泛
.ndjsonNewline Delimited JSON — 技術上是同一種格式,只是名稱不同
.json某些工具以 .json 副檔名輸出 JSONL,這可能造成混淆

這三種副檔名都包含相同的格式 — 每行一個 JSON 值。JSONL 的 MIME 類型為 application/jsonl 或 application/x-ndjson。

試用我們的免費 JSONL 工具

驗證 JSONL 語法、轉換格式、檢視檔案——全部在瀏覽器中完成。

試用我們的 JSONL 檢視器

在瀏覽器中開啟、檢視和編輯高達 1GB 的 JSONL 檔案。無需上傳,100% 私密。

常見問題

什麼是 JSONL?JSON Lines 格式指南、範例與使用情境 | jsonl.co