ブラウザのコンバーターにとって「大きい」とはどういう意味か
「JSONファイルが大きい」と言うとき、その意味は5千行から5ギガバイトまで幅広く、それぞれまったく別の問題です。ブラウザのコンバーターには上限が1つあるのではなく、3つあります。どの上限に当たりそうかを知れば、そのまま変換すべきか、分割すべきか、ブラウザから離れるべきかが分かります。
1つ目の上限は解析です。変換の前に、ブラウザはJSON.parseでJSONテキストをメモリ上のオブジェクトに変換します。解析後のオブジェクトは、元のテキストのおよそ2~3倍のメモリを使います。25MBのファイルは、CSVのセルが1つもできる前に、50~75MBの生のオブジェクトになります。2つ目の上限は入力です。50メガバイトものテキストをテキストエリアに貼り付けるのは、どんなマシンでも遅くて使いにくい作業です。だからアップロードボタンがあります。クリップボードを通さずに、ファイルをコンバーターに直接渡せます。3つ目の上限はプレビューです。変換後、ページは結果を確認できるように表を描画します。50万行のDOMを描画することこそが、実際にタブを固まらせる原因です。このリストにないものにお気づきでしょうか。変換速度です。下の測定結果が示す通り、オブジェクトをCSVテキストに変える作業は、パイプライン全体の中で最も安い処理です。
「大きなJSONファイルを無料でオンライン変換できますか」という問いは、実は3つの小さな問いに分解できます。ブラウザはメモリ不足にならずに解析できるか。入力経路はファイルを無理なく受け付けられるか。プレビューは耐えられるか。「大きい」と呼ばれるファイルのほとんどは、3つともイエスです。このガイドの残りは、推測ではなく、正直に境界線を見つけるためのものです。
実測:このページが大きなファイルを変換する速さ
このセクションの数値はすべて、ビルドマシン上で、このページがブラウザで実行するのと同じ変換エンジンで測定しました。フラット化をオンにした同じjsonToCsv関数で、ネストした顧客オブジェクトを含む生成した注文データに対して測定しています。マシンは普通のサーバーで、チューニングされたベンチマーク用のものではありません。まずまずのノートパソコンでのおおよその目安として受け取ってください。
1,000行、JSONサイズ0.10MB:20ミリ秒。10,000行、1.01MB:57ミリ秒。50,000行、5.10MB:221ミリ秒。100,000行、10.21MB:403ミリ秒。250,000行、12.5MB:636ミリ秒。500,000行、25.0MB:エンジン時間で約1.4秒、実時間で2.3秒。50万行のファイルの出力CSVは11.7MBで、ヘッダー行は期待通り、id、item、qty、price、customer.name、customer.cityでした。
正直な注意点が2つあります。第1に、これらの時間は変換そのものの時間です。ブラウザはその前にJSONを解析し、その後にプレビューの表を描画します。そして上位のサイズではプレビューが一番重い処理です。2秒で変換できるファイルでも、50万行の表が描画される間はタブが重く感じることがあります。第2に、テストデータは均一な生成データです。キーが不揃いだったり、深くネストしていたり、巨大なテキストが入っていたりする実際のエクスポートは、エンジンがすべての値をたどるため少し遅くなります。それでも結果の形は変わりません。10万行を大きく超えても変換ステップは1秒未満に収まり、50万行でも数秒の前半に収まります。他の場所でファイルの変換が遅いなら、そのコンバーターが無駄な処理をしているということです。作業自体は安いものだからです。
rows JSON size convert time
1,000 0.10 MB 20 ms
10,000 1.01 MB 57 ms
50,000 5.10 MB 221 ms
100,000 10.21 MB 403 ms
250,000 12.5 MB 636 ms
500,000 25.0 MB ~1.4 s engine / 2.3 s wall
# header produced for every file:
# id,item,qty,price,customer.name,customer.city60秒テスト:設計する前にまず試す
大きなファイルへの不安のほとんどは、実際に試すだけで解消します。数メガバイトを超えるものは、貼り付けではなくアップロードボタンを使い、コンバーターの上にあるステータスバッジを見てください。JSONが正しく解析されると、ReadyからValidに行数が表示された状態に変わります。タブが反応し続け、ダウンロードボタンからCSVが受け取れれば、それで終わりです。分割戦略など最初から不要でした。
テストを正直にするポイントが2つあります。第1に、自動変換はオンのままにしてください。デフォルトでオンです。ファイルの読み込みと同時にCSVが表示されるため、余計なクリックなしで結果が見られます。第2に、行数を信じてください。バッジが約480,000行でValidと表示し、予想もそのくらいなら、解析はファイルを正しく理解しています。行数が大きくずれている場合、たいていは1と表示されますが、それはJSONが配列を包んだ巨大なオブジェクト1つになっている可能性が高く、コンバーターは抽出できる部分を抽出しています。これはファイルの形の問題であって、サイズの問題ではありません。ラッパーのパターンは、フラット化のガイドで解説しています。
タブが固まる、長時間もたつく、ブラウザがページの終了を提案してくる、そのときは止めて分割してください。同じファイルを再読み込みして貼り付け直しても、結果は変わりません。メモリの上限は交渉に応じないからです。次のセクションが、その突破口です。
ブラウザでのチャンク分割:行を失わないレシピ
分割と聞くと妥協案に思えるかもしれませんが、これは正確な方法です。JSON配列を分割し、タブでチャンクごとに変換し、チャンクごとにCSVをダウンロードして、ヘッダー行を1つだけ残して結合します。ビルドマシンで直接検証しました。20,000行のファイルを2つに分割し、それぞれを個別に変換し、2つ目のCSVのヘッダーを取り除いて、2つの本体を連結しました。結合後の結果は、ファイル全体を一度に変換したものとバイト単位で一致しました。
なぜうまくいくのか、一文で説明します。すべてのチャンクの形が同じなら、コンバーターは各チャンクで同じ列リストを同じ順序で導き出すため、本体はぴったり揃い、管理すべきはヘッダーだけになります。最初のCSVのヘッダーを残し、2つ目以降のCSVのヘッダー行を落として、連結してください。注意が必要なのは不規則なデータだけです。行ごとにキーが違う場合、チャンク1がnotes列を見たことがなければ、チャンク2の列と揃いません。不規則なファイルは、後のセクションのスクリプトの出番です。スクリプトは書き出す前に全列リストを計算します。
チャンクはいくつに分けるべきか。タブが余裕で変換できるサイズを狙います。上の測定結果から言うと、1チャンクあたり5万~10万行です。40万行のファイルなら4~8チャンクになり、各チャンクは0.5秒未満で変換されます。クリックも含めて全体で数分ですべて終わり、1行も失われません。
JSONを壊さずにファイルを分割する
避けるべきミスは、ファイルをテキストとして分割することです。25MBのファイルをテキストエディターで半分に切ると、ほぼ確実に壊れます。開いたままの角括弧、引用符の途中で切れた文字列、境界に取り残されたカンマ。JSONを理解するツールで、データとして分割してください。各ピースが単体で有効なJSONのままになります。
最も短く確実な分割ツールは、Pythonの数行です。ファイルを1回読み込み、リストをスライスして、各スライスを別ファイルに書き出します。ビルドマシンで3万行のファイルに対して検証済みです。1万行ずつ3つのピースになり、ピースを組み立て直すと元のファイルと完全一致しました。ターミナル派の方は、jqでも同じ考え方で配列をスライスできます。jq '.[0:50000]' big.json > part1.jsonで先頭5万要素を、jq '.[50000:100000]'で次の5万要素を取り出します。これは標準的なjqのスライス構文で、jqのマニュアルに記載されています。
ピースには順序通りに名前を付けてください。part1、part2、part3のようにし、順序通りに変換します。CSVも同じ順序で出てくるため、結合は前セクションのヘッダールールでの連結だけです。
import json
rows = json.load(open('big.json'))
chunk = 50000
for i in range(0, len(rows), chunk):
part = rows[i:i+chunk]
json.dump(part, open('part%d.json' % (i // chunk + 1), 'w'))
print('part%d.json:' % (i // chunk + 1), len(part), 'rows')
# terminal alternative (standard jq slice syntax):
# jq '.[0:50000]' big.json > part1.json
# jq '.[50000:100000]' big.json > part2.jsonブラウザのタブでは無理なファイルがある
正直な上限があり、はっきり名前を挙げる価値があります。ブラウザがファイルをメモリに解析できない場合、オンラインコンバーターはどれも助けになりません。どのコンバーターも最初に解析するからです。症状は見間違えようがありません。読み込み中にタブの終了を提案される、ブラウザがメモリ不足エラーを報告する、ファイルのアップロードが終わらない。その時点でファイルはタブの容量を超えています。仕事は自分のマシンで動くスクリプトの出番です。スクリプトはデータをすべてオブジェクトとして保持せずに処理できます。
実際にはどこが上限か。マシンのRAMとデータのネスト具合によりますが、普通のノートパソコンでは、数百メガバイトのJSONテキストあたりからタブが力尽き始めます。25MBのファイルはここで約2秒、余裕を持って変換できました。250MBのファイルは別の次元で、メモリ負荷はおよそ10倍です。1GBのファイルは完全にスクリプトの領域です。どちらの側にいるか分からなければ、前のセクションの60秒テストが実験的に答えを出してくれます。死んだタブこそ、ファイルがスクリプトを求めている証拠です。
もう1つ、正直な注意点です。「ファイルサイズ無制限」をうたうサイトがあります。たいていの意味は、サーバーがアップロードを受け付けるということです。つまり上限がブラウザからサーバーのキューに移るだけで、その過程でデータが第三者の手に渡ります。サイズが問題になるファイルでその取引は、めったに割に合いません。
スクリプトの出番:不規則なデータにも耐える分割Python
ブラウザが無理なときは、このスクリプトです。ファイル全体を1回読み込み、pandasでチャンクごとにフラット化して、チャンクごとに1つのCSVを書き出します。ブラウザのレシピでは対応できない不規則なデータ、つまり行ごとにキーが違うデータにも対応します。コツは、書き出す前に全データから列リストを計算し、各チャンクをその列に強制的に合わせることです。ビルドマシンで3万行のファイルに対して検証しました。一部の行にnotesフィールド、他の行にflagフィールドがあるデータで、3つのチャンクCSVを結合すると、ファイルを一度に変換したものとバイト単位で一致し、時間は0.4秒でした。
このパターンは、ブラウザが到底届かないサイズまで拡張できます。各チャンクは次の読み込みの前に変換・書き出しされるため、ピークメモリはファイルサイズではなくチャンクサイズに比例します。大きなマシンではチャンクサイズを上げて高速化し、メモリが厳しければ下げてください。エクスポートの途中で形が変わる場合も、同じ列結合のテクニックが守ってくれます。実際のエクスポートは途中で形を変えるのが大好きです。
残る判断は1つです。チャンクごとに1つのCSVにするか、1つの結合ファイルにするか。下のスクリプトはチャンクごとに1ファイル書き出します。各ピースが独立して使える形です。1つのファイルにしたい場合は、ブラウザのレシピと同じヘッダールールで連結してください。最初のファイルのヘッダーを残し、残りを落とします。
import json, pandas as pd
rows = json.load(open('big.json'))
cols = list(pd.json_normalize(rows).columns) # union of all keys
chunk = 50000
for i in range(0, len(rows), chunk):
part = pd.json_normalize(rows[i:i+chunk]).reindex(columns=cols)
part.to_csv('out_part%d.csv' % (i // chunk + 1), index=False)
# merge the parts into one CSV (keep one header):
# head -n 1 out_part1.csv > merged.csv
# tail -n +2 -q out_part*.csv >> merged.csv大きなファイルとプライバシー:規模が大きいほどクライアントサイドが重要な理由
大きなファイルはたいてい機密性の高いファイルです。50万行のエクスポートが、おもちゃのデータセットであることはめったにありません。顧客、注文、ログ、患者記録です。だからこそ、コンバーターのアーキテクチャが最も重要になります。そしてそれは、誰かのサーバーではなくブラウザのタブで処理する静かな利点です。
このページのコンバーターは、ページの読み込み後はすべてブラウザの中で動作します。ダウンロードガイド用にこのページ自体のソースに対して検証しました。変換エンジンはローカルのクライアントサイドコードとして読み込まれ、コンバーター全体で唯一のネットワークリクエストは、オプションのURL取得ボタンです。これはクリックしたときだけ実行され、入力したアドレスだけを取得します。貼り付けやアップロードしたデータがどこにも送信されることはありません。第三者がファイルを見ることも、アップロードのキューで待つことも、保持ポリシーを読む必要もありません。
だから上の分割レシピは、プライベートなデータにも安全です。すべてのチャンクがお使いのマシンで変換され、ピースが外に出ることはありません。ファイルが大きすぎてスクリプトの出番になっても、同じ性質が保たれます。Pythonスクリプトはローカルで動き、ネットワークには一切触れません。
大きなファイルでやってはいけないこと
よくあるミスは4つです。第1に、数十メガバイトを入力欄に貼り付けて、アップロードボタンを使わないこと。アップロード経路はまさにこのためにあります。貼り付けは、大きなファイルをページに入れる最も遅い方法です。第2に、JSONをミニファイして何とかしようとすること。ミニファイで節約できるのは典型的なエクスポートで1割程度です。大きすぎるファイルが、やはり大きすぎるファイルになるだけです。第3に、50万行のCSVを「確認のため」に表計算ソフトで開くこと。表計算ソフトの上限は100万行前後で、それよりずっと前から描画が遅くなります。行数を確認し、ファイルの先頭と末尾を抜き打ちでチェックしてください。第4に、同じ巨大なエクスポートを毎週手作業で変換すること。ファイルが定期的に届くなら、前セクションのPythonスクリプトは一度設定すれば終わりで、50回の手作業変換に勝ちます。
心配しなくていいことが1つあります。フラット化です。ネストしたデータは、サイズの計算を意味あるほど変えません。フラット化トグルはネストしたオブジェクトをドット記法の列に変えますが、エンジンはそれを他の処理と同じパスで行います。上の測定はすべてフラット化オンで取っています。
関連ガイド
- JSONをフラット化してCSVに変換する方法:トグルが実際にやっていること(2026年ガイド)
- JSONファイルをCSVに変換する方法:アップロード、Excel、コマンドライン(2026年ガイド)
- JSONをCSVに変換するのに最適なツールは?6つの選択肢を検証(2026年ガイド)
- JSONファイルとCSVファイルとは?初心者のための両形式ガイド(2026年版)
- What does flattening a JSON mean? ネスト解除の意味を解説(2026年ガイド)
- what is JSON to CSV online? 3つの言葉を解説(2026年ガイド)
- what is JSON to CSV converter online? 内部の5つの部品を解剖する(2026年ガイド)
- JSONをローカルでCSVに変換する方法:ファイルを自分のパソコンに置いたまま変換する(2026年ガイド)
- JSONをローカルでCSVに変換する方法とは?6つの方法を比較(2026年ガイド)
- CSVがExcelで1列にまとまって開く原因と直し方(2026年ガイド)
- CSVがExcelで文字化けする原因と文字コードの直し方(2026年ガイド)
- CSVのコードの先頭の0がExcelで消える理由と、残す方法(2026年ガイド)
- CSVの日付がExcelで変わる原因と直し方(2026年ガイド)
- ExcelでCSVを保存すると内容が変わる理由と、元のファイルを守る方法(2026年ガイド)
- CSVが大きすぎてExcelで開けない原因と対処法(2026年ガイド)
よくある質問
大きなJSONをCSVに変換できる無料のオンラインツールはありますか?
はい、このページのコンバーターは無料で、登録も不要ですし、こちら側でファイルサイズの制限も設けていません。ファイルをアップロードし、ステータスバッジで行数を確認して、CSVをダウンロードしてください。変換はすべてブラウザの中で行われるため、データがお使いのマシンから外に出ることはありません。数十万行を超えるファイルの場合は、先にこのガイドのレシピでチャンクに分割してください。
オンラインで変換できるJSONファイルのサイズに上限はありますか?
このページには厳密な上限はありません。実用的な上限は、お使いのブラウザタブのメモリです。このページのエンジンでの測定では、25MB、50万行の変換は約2秒で、まだ余裕がありました。それを超えると、制限になるのは変換ではなく、解析とプレビューの表のためのタブのメモリです。タブが固まる、力尽きる場合は、ファイルを分割するか、このガイドのスクリプトの出番に切り替えてください。
大きなJSONファイルを小さく分割するにはどうすればいいですか?
テキストとしてではなく、データとして分割してください。各ピースが有効なJSONのままになります。Pythonでは、json.loadでファイルを読み込み、リストをスライスして、各ピースをjson.dumpで書き出します。ターミナルでは、jq '.[0:50000]' big.json > part1.jsonで先頭5万要素を取り出せます。テキストエディターで切ってはいけません。境界で括弧や引用符が壊れます。
分割して変換すると、CSVの出力内容は変わりますか?
すべてのチャンクの形が同じなら、変わりません。ビルドマシンで検証しました。ファイルを半分に分割し、2つのピースで変換して、ヘッダーを1つだけ残して結合した結果は、ファイル全体を一度に変換したものとバイト単位で一致しました。例外は、行ごとにキーが違う不規則なデータです。その場合は、このガイドのスクリプトを使ってください。書き出す前に全列リストを計算します。
機密データが入った大きなJSONファイルをオンラインで変換しても大丈夫ですか?
このページでは大丈夫です。変換はすべてブラウザの中で行われます。エンジンはローカルのクライアントサイドコードで、ファイルがサーバーにアップロードされることはありません。コンバーターで唯一のネットワークリクエストは、オプションのURL取得ボタンです。つまり、ブラウザでの変換も分割レシピも、第三者のサービスに渡したくないプライベートなエクスポートに安全に使えます。
大きなJSONを変換するとブラウザが固まるのはなぜですか?
たいていは変換ではなく、プレビューの表が原因です。数十万行の表を描画するのは、CSVテキストを作るよりはるかに重い処理です。巨大なファイルをアップロードではなく入力欄に貼り付けると、さらに悪化します。ファイルをアップロードしてください。それでもタブが苦しそうなら、チャンクに分けて変換してください。各ピースが小さければ、プレビューは一瞬で描画されます。
1GBのJSONファイルをブラウザでCSVに変換できますか?
正直に言うと、できません。そのサイズのファイルは、ブラウザのタブがメモリに解析できる量を超えています。オンラインコンバーターではどうにもなりません。お使いのマシンでスクリプトを使ってください。このガイドで紹介した、チャンク分割したjson_normalizeを使ったPythonか、JSON Linesデータ用のストリーミングツールです。ファイルが1つの巨大な配列なら、先にJSON Lines形式に変換してください。1行1オブジェクトの形式は、ストリーミングで綺麗に処理できます。
大きなファイルで今すぐ試せます
大きなJSONの一部を貼り付けて、コンバーターがミリ秒単位で処理するのを確認しましょう。無料、登録不要、すべてブラウザ内で動作します。
JSON CSV コンバーターを開く