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エンコーディングを使用する必要があります
  • ファイル末尾の改行はオプションです
  • 空行はほとんどのパーサーで無視されます
有効な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"}
OpenAIファインチューニング形式Popular

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

Pythonの組み込みjsonモジュールはJSONLを自然に処理できます:

import json

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

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.coを使用して最大1GBのJSONLファイルを開いて閲覧できます。アップロード不要、すべてブラウザ内で処理されます。

JSONLファイルの作成方法

JSONLファイルの作成は簡単です。1行に1つの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自体にコメント構文はありません。

データと一緒にメタデータや注釈を含める必要がある場合、一般的な回避策は以下の通りです:

  • 1JSONオブジェクトにメタデータフィールドを追加:{"_comment": "テストデータ", "name": "Alice"}
  • 2JSONLファイルと一緒に別のメタデータファイルを使用
  • 3ファイルの最初の行にメタデータを追加:{"_meta": {"version": "1.0", "created": "2026-01-15"}}

「コメント」フィールドは通常のデータとして解析されることに注意してください。JSONLファイルを消費するアプリケーションは、メタデータフィールドを無視するように設計する必要があります。

JSONL vs JSON

主な違いは構造です。JSONはすべてを単一の値でラップしますが、JSONLは1行に1つの値を格納します。

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はML訓練データの標準形式です。OpenAI、Hugging Face、その他のAIプラットフォームは、各訓練例が独立した行であり、効率的にシャッフル、サンプリング、ストリーミングできるため、ファインチューニングデータセットにJSONL形式を使用しています。

ログファイルとイベントストリーム

JSONL

構造化ログシステム(ELKスタック、Datadog、CloudWatch)はJSONL形式でログを出力します。各ログエントリは1行のJSONで、新しいエントリの追加やリアルタイムのログ処理が容易です。

ビッグデータ処理

JSONL

Apache Spark、BigQuery、AWS AthenaなどのツールはJSONLをネイティブサポートしています。行ごとの形式により、分散システム全体での並列処理が可能です。各ワーカーが独立して行のチャンクを処理できます。

ストリーミングAPI

JSONL

大きな結果セットを返すAPIは、しばしばJSONLストリーミングを使用します。クライアントは完全なレスポンスを待たずに、結果が到着次第すぐに処理を開始できます。

JSONLファイル拡張子

JSONLファイルは一般的に以下の拡張子を使用します:

.jsonl標準的なJSONL拡張子、最も広く使用されている
.ndjsonNewline Delimited JSON——技術的に同じ形式で名前が異なるだけ
.json一部のツールは.json拡張子でJSONLを出力するため、混乱を招く可能性がある

3つの拡張子はすべて同じ形式を含んでいます——1行に1つのJSON値。JSONLのMIMEタイプはapplication/jsonlまたはapplication/x-ndjsonです。

JSONLビューアを試す

ブラウザで最大1GBのJSONLファイルを開いて、表示・編集。アップロード不要、100%プライベート。

よくある質問