JSON Lines(JSONL)⇔JSON配列 相互変換
1行に1つのJSONオブジェクトを並べるJSON Lines形式と、通常のJSON配列を相互変換します。機械学習データセット・ログ出力の確認に便利です。
使い方のヒント
- JSON Lines(JSONL)は1行に1つの独立したJSONオブジェクトを並べる形式で、OpenAIのファインチューニング用データセットやElasticsearch/Logstashのログ出力などで標準的に使われています。
- 「JSONL → JSON配列」モードでは、各行が個別に解析可能なJSONオブジェクトである必要があります。空行は自動的にスキップされます。
- 「JSON配列 → JSONL」モードでは、入力全体が1つのJSON配列(`[ ... ]`)である必要があります。配列内の各要素が1行ずつのJSONLとして出力されます。
- 大きなログファイルをJSONLからJSON配列に変換すると、jqコマンドやプログラミング言語の標準的なJSON配列パーサーで扱いやすくなります。
よくある質問
余談ですが ― なぜ「1行1レコード」という形式が生まれたのか
JSON Lines(JSONLとも呼ばれる)という形式が生まれた背景には、通常のJSON配列には「全体をメモリに読み込んでパースし終えるまで、途中経過の1件も取り出せない」という制約があったことが挙げられます。数百万行に及ぶログデータや機械学習の学習データセットをJSON配列で扱おうとすると、ファイル全体をメモリに展開する必要があり、巨大なファイルではメモリ不足やパース時間の増大という問題が生じていました。
JSON Linesは、この問題を「1行=1つの完結したJSONオブジェクト」というシンプルな制約で解決します。ファイルを1行ずつ読み込みながら都度パースできるため、ファイル全体をメモリに読み込む必要がなく、ストリーム処理・並列処理と非常に相性がよいという特性があります。この設計思想は、Unix系OSの伝統的な「1行1レコード」のテキスト処理文化(`grep`・`awk`・`sed` 等のコマンドが行単位で動作すること)とも親和性が高く、既存のコマンドラインツール群にそのまま組み込めるという実用上のメリットも大きいとされています。
現在ではAI・機械学習分野でのデータセット配布形式として広く採用されており、大規模言語モデルの学習データやファインチューニング用のプロンプト・レスポンスのペアなどが、JSON Lines形式で配布されるケースが一般的になっています。