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 jsonwith 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 jsonrecords = [{"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です。
無料のJSONLツールを試す
JSONLの構文を検証し、形式間の変換やファイルの表示が可能です — すべてブラウザ内で完結します。