JSON 配列の要素 1 つが、JSONL の 1 行になります
JSON 配列は、角かっこ [ ] の中に値をカンマで並べた 1 つの JSON ドキュメントです。JSONL(JSON Lines)は、1 行に JSON の値を 1 つずつ書き、改行で区切る形式です。どちらも同じリストを表せますが、読み方が異なります。配列は閉じ角かっこまで文書全体を読まないと終わらず、JSONL は 1 行ずつ読めるうえ、末尾に 1 行を追記することもできます。上のサンプルの配列には注文が 4 件入っているので、JSONL に変換すると 4 行になります。
このツールは、貼り付けた内容が配列か JSONL かを見て、変換の向きを自動で合わせます。{"data": [ … ]} のようにオブジェクトで包まれた API レスポンスが複数行に整形されていれば、中にある配列を探して変換します。1 行に圧縮されたレスポンスは JSONL の 1 行として読まれるので、向きを「JSON 配列 → JSONL」に切り替えてください。結果は、行ごとに番号・形状の文字・サイズバーが付いた形で結果欄に表示され、行を押すとその値を展開して確認できます。下の「キー構成」では、要素ごとにキーが欠けていないか、同じキーに数値と文字列が混ざっていないかをバーで確認できます。入力した内容やファイルはサーバーに送信されず、このブラウザー内だけで処理されます。
JSON 配列と JSONL を相互に変換する場面
- OpenAI Batch API の入力ファイルを作るとき: バッチ処理は .jsonl ファイルの 1 行を 1 件のリクエストとして読み、リクエストごとに異なる custom_id が必要です。1 つのバッチには最大 50,000 件のリクエストを含められ、入力ファイルは最大 200 MB です。リクエストの一覧を配列で作った場合は、JSONL に変換してから、キー構成で custom_id に「値がすべて異なる」が付いていることを確認してください。
- BigQuery などのデータウェアハウスに読み込むとき: Google Cloud のドキュメントでは、読み込む JSON は改行区切りで、オブジェクト 1 つが 1 行に収まっている必要があると案内されています。API から取得した配列ファイルをそのままアップロードするとこの条件を満たさないため、先に JSONL に変換します。
- 追記して溜めたログを 1 つのドキュメントとして渡すとき: 1 行ずつ追記してきた JSONL のログを、チャートツールや JavaScript のコードなど、JSON ドキュメント 1 つを読み込むプログラムに渡すには、JSON 配列にまとめる必要があります。
- 大きなデータを分割して処理するとき: JSONL は行数で切っても、断片がそのまま JSONL になります。配列は切った場所で角かっことカンマが食い違い、断片ごとに直す必要があるため、分割して送ったり処理したりするデータには JSONL が向いています。
変換の規則
- JSON 配列 → JSONL: 最上位の配列の要素ごとに 1 行を書きます。文字列の外にある空白と改行だけを取り除き、数値の表記・エスケープ・キーの順序は原文のまま残します。行末は LF で、JSON Lines の文書が推奨するとおり最後の行の後ろにも LF を付け、BOM は付けません。空の配列 [] は要素がないため 0 バイトになります。
- 包まれた API レスポンス: 最上位がオブジェクトの場合は、その中から配列を探します(data.items のように、キーの階層は 3 段階まで)。オブジェクトを最も多く含む配列を優先して選び、上部の「変換する配列」で別の配列や「オブジェクト全体を 1 行に」を選ぶこともできます。
- JSONL → JSON 配列: 1 行から JSON の値を 1 つずつ読み、配列の要素として入れます。Windows の CRLF の行末も読めます。JSON Lines では空行は有効な値とみなされないため、空行はエラーとして知らせます。配列の形式は、「2 スペースのインデント」「4 スペースのインデント」「要素ごとに 1 行」「すべて 1 行」から選べます。
- 寛容に読み取る: 空行、行末のカンマ、複数行にわたってインデントされた値、RS 区切り文字(0x1E)を読み飛ばして、値を順に読み取ります。NDJSON の仕様は、空行を黙って無視することを認めつつ、その動作を文書化し、設定で変更できるようにすることを求めています。そのため既定ではオフにしてあり、エラーが出たときはエラーカードのボタンですぐにオンにできます。
- 向きの自動判定: 入力欄の内容を丸ごと置き換える貼り付けとファイルを開くときだけ、向きを合わせます。角かっこで包まれた配列 1 つと、複数行にわたるオブジェクト 1 つ(整形された API レスポンスなど)は JSON 配列とみなし、1 行で書かれたオブジェクトを含むそれ以外はすべて JSONL とみなします。Batch API のリクエスト行のような 1 行のオブジェクトは JSONL の 1 行だからです。改行を取り除いた 1 行の API レスポンスも JSONL の 1 行として読むため、中の配列を行に分けるには、向きを「JSON 配列 → JSONL」に切り替えてください。手入力している間は向きを変えません。
- 値の種類: JSON Lines では、オブジェクトだけでなく数値・文字列・配列・null も 1 行の値として認められます。このツールもすべての値をそのまま変換し、オブジェクトではない要素の数はキー構成で別に知らせます。
例: 注文 4 件が JSONL の 4 行に
上の初期画面の配列を JSONL に変換した結果です。サイズは改行を除いた UTF-8 のバイト数で、形状は同じキーの組み合わせに同じ文字を付けたものです。
| 行 | JSONL の内容 | サイズ | 形状 |
|---|---|---|---|
| 1 | {"id":1001,"顧客":"美咲","数量":2,"タグ":["新規","クーポン"]} | 75 B | A |
| 2 | {"id":1002,"顧客":"蓮","数量":1,"メモ":"玄関前に置いてください\nチャイムは鳴らさないでください"} | 129 B | B |
| 3 | {"id":1003,"顧客":"陽菜","数量":3,"タグ":[]} | 52 B | A |
| 4 | {"id":1004,"顧客":"大和","数量":"2","タグ":["常連"]} | 62 B | A |
インデントと空白を含む入力の配列は 365 バイトで、JSONL の結果は改行 4 つ分を加えて 322 バイトです。2 行目のメモに見える \n は文字列の中に書かれたエスケープであり、実際の改行ではないため、オブジェクト全体が 1 行のまま残ります。同じ 4 行を逆に JSON 配列にまとめると、配列の形式によってサイズが次のように変わります。
| 配列の形式 | サイズ | 向いている場面 |
|---|---|---|
| 2 スペースのインデント | 476 B | 人が構造を目で確認するとき |
| 4 スペースのインデント | 582 B | 4 スペースのインデントを使うコードリポジトリに入れるとき |
| 要素ごとに 1 行 | 337 B | バージョン管理で、変更した要素だけを 1 行の差分として見たいとき |
| すべて 1 行 | 324 B | サイズを最小にして送るとき |
キー構成で確認すること
- 形状 A・B: キーの組み合わせが同じ要素には同じ文字が付き、最も多い形状が A です。この例では A が 3 件で、メモがあってタグがない 2 件目の注文だけが B(+メモ −タグ)です。形状のチップを押すと、その形状の行だけが結果欄で強調されます。
- キーカードのバー: 全要素のうち、そのキーを含む要素の割合と、値の種類(数値・文字列・真偽値と null・オブジェクトと配列)を表示します。バーの空いている部分は、そのキーがない要素です。空きのあるカードを押すと、そのキーが欠けている行を強調します。
- 型が混在: この例の数量は、3 件が数値で、1 件が文字列の "2" です。列ごとにデータ型を決めているデータベースや分析ツールに読み込むと、こうした値がエラーや型変換の原因になることがあるため、事前にそろえてください。null は空の値としてよく混在するので、混在には数えません。
- 値がすべて異なる: すべての要素にあり、値の種類が 1 つで、同じ値が 1 度も重ならないキーに付きます。id や Batch API の custom_id のように、重複してはいけないキーの確認に使います。
- 警告: 安全な整数の範囲を超える数値、1 つのオブジェクトに同じキーが 2 回出現する要素、オブジェクトではない要素がある場合は、キー構成の上部に別途表示します。
間違えやすいケース
| 入力 | 何が問題か | 修正の方法 |
|---|---|---|
| 行の間に空行がある JSONL | JSON Lines では、空行もエラーです。 | 空行を削除するか、「寛容に読み取る」をオンにします。 |
{"a":1}, のように行末にカンマがある | 配列の中身をそのままコピーした形で、JSONL ではありません。 | カンマを削除するか、「寛容に読み取る」をオンにします。 |
| 複数行にインデントされたオブジェクトが並んでいる | 1 つの値が 1 行に収まっていません。 | 「寛容に読み取る」で読み取るか、配列で包んで「JSON 配列 → JSONL」で変換します。 |
{'a': 1, 'b': None} | Python の辞書をそのまま出力した形です。JSON で使えるのは二重引用符と null だけです。 | Python の json モジュールで出力し直します。 |
[1, 2,] | JSON では、最後の要素の後ろのカンマは使えません。 | 閉じかっこの前のカンマを削除します。 |
| 文字列の中の実際の改行やタブ | JSON では、文字列の中の制御文字をエスケープするよう定められています(RFC 8259 §7)。 | 改行は \n、タブは \t と書きます。 |
{"郵便番号": 0012} | JSON の数値は 0 で始められません。 | "0012" のように文字列で書きます。 |
NaN, Infinity | JSON の文法には、これらの値がありません(RFC 8259 §6)。 | null か文字列に置き換えます。 |
エラーが出ると、結果欄に何行目の何文字目かと、その行の問題の位置が表示されます。「入力で位置を見る」を押すと、入力欄のその文字へ移動します。
大きな整数と重複したキーは原文のまま変換します
JSON の規格では、整数が −(253)+1 から (253)−1 までの範囲なら、異なるプログラムの間でも同じように読み取れるとされています(RFC 8259 §6)。JavaScript が正確に扱える最大の整数も 9,007,199,254,740,991 です。このツールは数値を計算用の数値に変換せず、書かれた文字をそのまま移すので、範囲を超える注文番号も変わりません。同じキーが 1 つのオブジェクトに 2 回出現しても削除しません。ただし、結果を受け取るプログラムは異なる読み方をすることがあります。
| 入力値 | このツールの結果 | JavaScript の JSON.parse で読んだ値 |
|---|---|---|
9007199254740993 | 9007199254740993 | 9007199254740992 |
{"id":1,"id":2} | {"id":1,"id":2} | {"id":2} |
1.50e+3 | 1.50e+3 | 1500 |
"é" | "é" | "é" |
JSON の規格は、同じ名前が 2 回出現するオブジェクトを受け取ったプログラムの動作は予測できないとし、多くの実装が最後のペアだけを残すと記しています(RFC 8259 §4)。Python の json モジュールも最後の値を使います。そのためキー構成は、同じキーが 2 回出現した要素の数を警告で知らせ、キーカードでは最後の値を基準に数えます。長い番号は、受け取る側でも変わらないよう "9007199254740993" のように文字列として扱うのが安全です。
JSON Lines・NDJSON の仕様、RFC 8259・7464、OpenAI の Batch ガイド、Google Cloud の BigQuery ドキュメント、Python の json ドキュメント、MDN のドキュメントは、2026-10-20 に原文を確認しました。
制限と注意点
- 入力は 5 MB(5,242,880 バイト)、結果は 32 MB まで変換します。gzip で圧縮したファイル(.jsonl.gz など)は展開して読み込み、展開後のサイズで数えます。それより大きなデータは、JSONL にして行単位で分割して処理してください。
- 結果欄には先頭の 400 行、展開表示は先頭の 20,000 文字、キーカードは 24 個、形状のチップは 8 種類まで画面に表示します。コピーと保存には結果の全体が含まれます。
- キー構成で数えるのは、要素の最上位のキーだけです。オブジェクトの中にあるオブジェクトのキーは数えません。
- 入れ子は 512 段階まで読み取ります。ファイルは UTF-8 で読み(先頭の BOM は除去)、BOM 付きの UTF-16 ファイルも読めます。保存するファイルは圧縮なしの UTF-8 で、BOM は付けません。
- RS 文字で値を区切る JSON テキストシーケンス(RFC 7464)は、「寛容に読み取る」で読み取りだけが可能で、その形式での書き出しには対応していません。
- このツールが検査するのは JSON の文法までです。受け取るプログラムが要求するキー(custom_id など)やデータ型は、そのサービスのドキュメントで確認してください。
出典
- 01JSON Lines1行に有効な JSON の値が 1 つ(すべての値を許可、空行は無効)、行末は '\n'('\r\n' も読める)、最後の行の末尾も推奨、BOM は禁止、拡張子は .jsonl・.jsonl.gz — 2026-10-20 確認
- 02NDJSON — Newline Delimited JSON 仕様'\n'・'\r\n' 区切り、空行は黙って無視してもよい(MAY、文書化・設定可能)、メディアタイプは application/x-ndjson、拡張子は .ndjson
- 03IETF — RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format§4 オブジェクト内の名前は一意であるべき(SHOULD)・重複時の動作は予測できない、§6 整数 [−(253)+1, (253)−1] で相互運用可能・Infinity と NaN は不可、§7 制御文字のエスケープ、§8.1 BOM
- 04IETF — RFC 7464: JavaScript Object Notation (JSON) Text Sequences値ごとに先頭に RS(0x1E)、メディアタイプは application/json-seq
- 05OpenAI — Batch API ガイド.jsonl ファイルの 1 行が 1 件のリクエスト、リクエストごとに一意な custom_id、1 バッチあたり最大 50,000 件・入力ファイルは最大 200 MB
- 06Google Cloud — Loading JSON data from Cloud Storage (BigQuery)JSON データは改行区切り(ndJSON)、オブジェクト 1 つが 1 行、ndJSON は JSON Lines と同じ形式
- 07Python ドキュメント — json: JSON encoder and decoderオブジェクト内で同じ名前が繰り返された場合は、最後の名前と値のペアの値だけを使う
- 08MDN — Number.MAX_SAFE_INTEGERJavaScript の最大の安全な整数 253 − 1 = 9,007,199,254,740,991
- 09MDN — JSON.parse()JSON の数値は JavaScript の数値に変換され、精度が失われることがある。大きな数は文字列でやり取りする方法
よくある質問
JSON 配列を JSONL に変換するには?
上の入力欄に JSON 配列を貼り付けるか、ファイルを開くと、結果欄に要素 1 つが 1 行の JSONL がすぐに表示されます。コピーボタンで貼り付け先に移すか、「JSONL を保存」ボタンで .jsonl ファイルを取得してください。JSONL を貼り付けると、向きが「JSONL → JSON 配列」に切り替わり、配列にまとめられます。
JSON ファイルの拡張子を .jsonl に変えるだけでよいですか?
いいえ。拡張子を変えても、中身は外側の角かっこと要素の間のカンマがある配列のままです。JSONL は角かっこなしで 1 行に値を 1 つずつ書く形式なので、このツールのように要素を 1 行ずつに分けて書き直す必要があります。
API レスポンスが {"data": [...]} のように包まれている場合は?
整形された(複数行の)レスポンスは、そのまま貼り付けて構いません。最上位がオブジェクトの場合は、その中から配列を探し(キーは 3 段階まで)、オブジェクトを最も多く含む配列を JSONL に変換します。改行を取り除いた 1 行のレスポンスは JSONL の 1 行として読まれるため、向きを「JSON 配列 → JSONL」に切り替えてください。別の配列を使うときや、オブジェクト全体を 1 行にするときは、上部の「変換する配列」で選んでください。
JSONL の途中に空行があるとどうなりますか?
JSON Lines の基準では空行もエラーになるため、何行目かをお知らせします。空行を削除するか、エラーカードの「寛容に読み取る」ボタンを押すと、空行を読み飛ばして配列にまとめます。最後の行の後ろにある改行 1 つはエラーではありません。
複数行にインデントされたオブジェクトを入力するとエラーになります。
JSONL では 1 つの値をすべて 1 行に書く必要があるため、複数行にインデントされたオブジェクトは、1 行目で値が終わっていないというエラーになります。「寛容に読み取る」をオンにすると、行に関係なく値を順に読み取って配列にまとめ、その配列をもう一度 JSONL に変換すれば 1 行ずつに整います。
オブジェクトではない数値や文字列も 1 行にできますか?
できます。JSON Lines ではオブジェクトだけでなく、数値・文字列・配列・null も 1 行の値として認められているため、このツールもそのまま変換します。ただしオブジェクトだけを受け付けるツールが多いので、オブジェクトではない要素がある場合は、キー構成で件数をお知らせします。
長い数値や同じキーは変わりませんか?
変わりません。数値を計算用の数値に変換せず、書かれた文字をそのまま移すので、9007199254740993 のような大きな整数や 1.50e+3 のような表記がそのまま残り、同じキーが 2 回出現しても削除しません。受け取るプログラムは大きな数値を丸めたり、最後のキーだけを使ったりすることがあるため、キー構成で警告を表示します。
入力した JSON やファイルはサーバーに保存されますか?
保存されません。変換はこのブラウザー内だけで行い、入力した内容やファイルをサーバーに送信しません。ページを閉じると、入力した内容も消えます。