JSON vs JSONL: 違いは?

JSONとJSONL(JSON Lines)形式、その違い、それぞれの使い時を理解するための完全ガイド。

最終更新:2026年2月

クイック比較

特徴JSONJSONL (JSON Lines)
構造単一のオブジェクトまたは配列1行に1つのJSONオブジェクト
ファイル拡張子.json.jsonl または .ndjson
パースファイル全体をパース必要行ごとにパース可能
ストリーミング困難ネイティブサポート
大ファイル処理メモリ集約型メモリ効率的
可読性インデントでフォーマットコンパクト、1行1レコード
Schema検証JSON Schema対応行ごとのJSON Schema
データ追加ファイル全体の書き換えが必要新しい行を追加するだけ

JSONとは?

JSON(JavaScript Object Notation)は、人間にとって読み書きが容易で、機械にとって解析と生成が容易な軽量データ交換フォーマットです。JavaScriptのサブセットに基づいており、Web上のデータ交換の事実上の標準となっています。

JSONファイルは単一のJSON値(通常はオブジェクトまたは配列)を含みます。データにアクセスするには、ファイル全体を1つのユニットとしてパースする必要があります。

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は1行に1つのJSONオブジェクトを格納。各行は独立しており、1行にエラーがあっても他の行はパース可能です。

2. パースとメモリ使用量

JSON

JSONはファイル全体を一度に読み込みパースする必要があります。1GBのJSONファイルのパースには約1GB+のメモリが必要です。

JSONL

JSONLは行ごとに読み取りパースできます(ストリーミング)。10GBのJSONLファイルでも、1行ずつ読むことで最小限のメモリで処理できます。

3. ストリーミングとリアルタイムデータ

JSON

JSONはストリーミング向けに設計されていません。ファイル全体の受信とパースが完了するまでデータ処理を開始できません。

JSONL

JSONLはストリーミングに最適です。各行は受信次第処理でき、リアルタイムデータフィード、ログ、SSEに最適です。

4. データの追加と書き込み

JSON

JSON配列へのデータ追加には、ファイル全体の読み取り、パース、新要素の追加、ファイル全体の書き換えが必要です。

JSONL

JSONLファイルへの追加は、末尾に新しい行を加えるだけです。既存データの読み取りや変更は不要。O(1) vs JSONのO(n)です。

5. 可読性

JSON

JSONはインデントによるフォーマットをサポートし、設定ファイルやAPIレスポンスの可読性に優れています。

JSONL

JSONLは設計上コンパクトで、1行1レコードです。機械処理に最適化されていますが、個別の行はフォーマット可能です。

JSON vs JSONLの使い分け

JSONJSONを使う場合:
  • 設定ファイル
  • REST APIのリクエスト/レスポンスボディ
  • 小規模な構造化データ(10MB未満)
  • データの可読性と編集性が必要
  • ネストされた階層的データ構造
  • ブラウザ側のデータ交換
JSONLJSONLを使う場合:
  • 大規模データセットの処理(100MB+)
  • リアルタイムデータストリーミング
  • ログファイルとイベントデータの書き込み
  • 機械学習モデルのトレーニング(OpenAI、Hugging Face)
  • ETLパイプラインとデータ処理
  • 頻繁なデータ追加
  • Unixツールでのデータ処理(grep、awk、sed)

一般的なユースケース

機械学習とAI

JSONL

JSONLはMLトレーニングデータの標準形式です。OpenAIはファインチューニングデータセットにJSONLを使用し、多くのMLフレームワークはJSONL入力を期待します。

アプリケーションロギング

JSONL

サーバーログ、アプリケーションイベント、監査証跡はJSONLに自然に適しています。各イベントは1行として書き込まれ、追加、grep検索、ストリーミングツールでの処理が容易です。

Web APIと設定

JSON

REST APIは通常、リクエストとレスポンスボディにJSONを使用します。設定ファイル(.json)はネストされたオブジェクトを持つ可読な構造化設定にJSONを使用します。

ビッグデータと分析

JSONL

データパイプライン、ETLプロセス、分析ツールはJSONLを使用して大量のデータを処理します。各レコードを独立して処理でき、並列処理とMapReduceパターンが可能です。

コード例

JavaScriptでJSONを読む
// JSON読み取り - ファイル全体のロードが必要
const data = JSON.parse(fs.readFileSync('data.json', 'utf8'));

// データアクセス
data.forEach(item => {
  console.log(item.name);
});
JavaScriptでJSONLを読む
// JSONL読み取り - 行ごとにストリーム
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配列を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をJSON配列に
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));

JSONLビューアーを試す

ブラウザで最大1GBのJSONLファイルを即座に表示・編集。アップロード不要、登録不要。

よくある質問

JSON vs JSONL: 違いは?完全ガイド