JSONLとは?JSON Lines形式の完全ガイド
JSON Linesについて知っておくべきすべて——構文、例、ユースケース、ベストプラクティス。
最終更新:2026年2月
JSONLとは?
JSONL(JSON Lines)は、Newline Delimited JSON(NDJSON)とも呼ばれ、各行が有効なJSON値であり、改行文字で区切られたテキストベースのデータ形式です。データを単一の配列やオブジェクトで囲む標準的なJSONとは異なり、JSONLは1行に1レコードを格納します。
このシンプルな設計により、JSONLはストリーミング、ログ記録、大規模データセットの処理に最適です。各行をファイル全体をメモリにロードすることなく、独立して読み取り、解析、処理できます。
この形式は、OpenAI(ファインチューニングデータセット用)、BigQuery、Apache Spark、ログ管理システムなど、大量のデータを処理するツールやプラットフォームによって普及しました。
JSONL構文ルール
JSONL形式はいくつかのシンプルなルールに従います:
- 各行は有効なJSON値(オブジェクト、配列、文字列、数値、ブール値、またはnull)でなければなりません
- 行は改行文字(\n)で区切られます
- 行間にカンマや区切り文字はありません
- ファイルはUTF-8エンコーディングを使用する必要があります
- ファイル末尾の改行はオプションです
- 空行はほとんどのパーサーで無視されます
{"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のファインチューニングデータセットです:
{"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ファイルを検査:
# 最初の5行を表示
head -n 5 data.jsonl
# 総行数(レコード数)をカウント
wc -l data.jsonl
# jqで各行を整形表示
cat data.jsonl | jq .
# フィールド値でフィルタリング
cat data.jsonl | jq 'select(.age > 30)'Pythonの組み込みjsonモジュールはJSONLを自然に処理できます:
import json
with open('data.jsonl', 'r') as f:
for line in f:
record = json.loads(line)
print(record['name'])Node.jsでJSONLファイルを行ごとに読み取り:
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ファイルの作成は簡単です。1行に1つのJSON値を書き込むだけです。
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')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自体にコメント構文はありません。
データと一緒にメタデータや注釈を含める必要がある場合、一般的な回避策は以下の通りです:
- 1JSONオブジェクトにメタデータフィールドを追加:{"_comment": "テストデータ", "name": "Alice"}
- 2JSONLファイルと一緒に別のメタデータファイルを使用
- 3ファイルの最初の行にメタデータを追加:{"_meta": {"version": "1.0", "created": "2026-01-15"}}
「コメント」フィールドは通常のデータとして解析されることに注意してください。JSONLファイルを消費するアプリケーションは、メタデータフィールドを無視するように設計する必要があります。
JSONL vs JSON
主な違いは構造です。JSONはすべてを単一の値でラップしますが、JSONLは1行に1つの値を格納します。
[
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]{"name":"Alice","age":30}
{"name":"Bob","age":25}- JSONは解析するためにすべてメモリにロードする必要がある;JSONLは行ごとに読み取り可能
- JSONは要素間にカンマが必要;JSONLは改行を使用
- JSONは設定ファイルやAPIに適している;JSONLは大規模データセットやストリーミングに適している
- JSONにデータを追加するにはファイル全体の書き換えが必要;JSONLは新しい行を追加するだけ
詳細な比較については、完全な JSON vs JSONL guide.
一般的なユースケース
機械学習とAI
最も人気JSONLはML訓練データの標準形式です。OpenAI、Hugging Face、その他のAIプラットフォームは、各訓練例が独立した行であり、効率的にシャッフル、サンプリング、ストリーミングできるため、ファインチューニングデータセットにJSONL形式を使用しています。
ログファイルとイベントストリーム
JSONL構造化ログシステム(ELKスタック、Datadog、CloudWatch)はJSONL形式でログを出力します。各ログエントリは1行のJSONで、新しいエントリの追加やリアルタイムのログ処理が容易です。
ビッグデータ処理
JSONLApache Spark、BigQuery、AWS AthenaなどのツールはJSONLをネイティブサポートしています。行ごとの形式により、分散システム全体での並列処理が可能です。各ワーカーが独立して行のチャンクを処理できます。
ストリーミングAPI
JSONL大きな結果セットを返すAPIは、しばしばJSONLストリーミングを使用します。クライアントは完全なレスポンスを待たずに、結果が到着次第すぐに処理を開始できます。
JSONLファイル拡張子
JSONLファイルは一般的に以下の拡張子を使用します:
3つの拡張子はすべて同じ形式を含んでいます——1行に1つのJSON値。JSONLのMIMEタイプはapplication/jsonlまたはapplication/x-ndjsonです。