JSONLとは?JSON Lines形式の完全ガイド
JSON Linesについて知っておくべきすべて——構文、例、ユースケース、ベストプラクティス。
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例
'{'"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の構文を検証し、形式間の変換やファイルの表示が可能です — すべてブラウザ内で完結します。