JSONをローカルでCSVに変換するとは、実際にはどういう意味か
ローカルという言葉は3つの異なる意味で使われており、プライバシーが理由でこの言葉を調べている場合、その違いは重要です。1つ目の意味はクライアントサイドです。ブラウザのタブの中で変換を行うウェブページのことです。ウェブサイトを見ていることには変わりありませんが、変換のコードが自分のパソコン上で動くため、ページがデータをどこにも送ることはありません。2つ目の意味はインストール済みのソフトウェアです。パソコン上のプログラム、たとえばデスクトップアプリやエディターの拡張機能が、ファイルを読み取ってファイルを書き出します。3つ目の意味は、自分で実行するスクリプトです。Python、jq、Nodeの数行のコードで、完全に自分で管理でき、実行する前に中身を読むことができます。
この3つはすべてファイルを自分のパソコンに置いたままにします。違うのは、インストールが必要かどうか、学ぶべきことがあるかどうか、結果を繰り返し再現できるかどうかです。クライアントサイドのページはインストールも学習も不要ですが、ファイルを変換するたびにクリックを繰り返す必要があります。スクリプトはツールのインストールと数行の入力が必要ですが、100個のファイルに対して1つのコマンドで実行でき、毎回同じ結果が得られます。このガイドではこの3つすべてをローカルとして扱い、それぞれの方法がどれにあたるかを明示します。
ローカルだからといって、魔法のようにプライベートになるわけではないことにも注意してください。見知らぬ人からダウンロードしたスクリプトを、読まずに実行すれば、そのスクリプトはパソコン上で何でもできてしまい、ファイルをどこかに送ることも可能です。このガイドのスクリプトは全文を読むのに十分なほど短く、機密データを扱うスクリプトは実行する前に読むべきです。ローカルとは作業がどこで行われるかという性質であり、ラベルを信じるのではなく、コードを読むかネットワークの動きを見ることで検証するものです。ブラウザの開発者ツールでネットワークタブを開き、変換中に通信が発生していないことを確認するのも有効な検証方法です。
ローカルが正しい選択になる場合と、そうでない場合
ローカル変換が正しい選択になるのは4つの場合です。1つ目は機密データです。顧客リスト、社内記録、データは社内に置くという契約やプライバシー規則の対象になるものがこれにあたります。ファイルがパソコンから出られないのであれば、どれだけ便利でもサーバーサイドのコンバーターは選択肢になりません。2つ目は接続がない場合です。飛行機の中、遠隔地、使いたいツールがブロックされているネットワークなどがこれにあたります。ローカルツールはサーバーに届く必要がないため、オフラインでもまったく同じように動きます。3つ目は再現性です。毎週同じ種類のエクスポートを変換するのであれば、スクリプトによって15分のクリック作業が1つのコマンドになり、同じコマンドが毎回同じ順番の同じ列を返します。4つ目はサイズと制御です。数百万行のファイルや、列名の変更と並べ替えが必要なファイルは、選択肢が固定されたページよりも、調整できるスクリプトで扱うほうが楽です。
ローカルが間違った選択になるのも3つの場合です。複数の人が同じ変換と設定を必要とする場合、共有のページのほうが、少しずつ変わってしまう5つのスクリプトのコピーよりも優れています。自分で管理できるパソコンがない場合、たとえば借りたパソコンやPythonやjqをインストールできないロックダウンされた仕事用のノートパソコンでは、クライアントサイドのページが依然としてローカルであり、依然として良い選択です。そして、ファイルがパソコンがメモリに快適に保持できる量より大きい場合、ファイルを分割するかストリーミングで処理するまでは、どのローカル手法も助けになりません。これは別の仕事です。選ぶ前に1つの質問をしてください。このファイルはこのパソコンに置いたままでなければならないか、そしてこれをまた行うか。両方の答えがはいなら、ローカルにしてスクリプト化してください。最初の答えだけがはいなら、クライアントサイドのページで十分です。
方法1:このページのコンバーターは、すでにローカルである
最も簡単なローカル手法は、すでに目の前にあります。このページのコンバーターは完全にブラウザのタブの中で動きます。JSONを貼り付けるかファイルをアップロードすると、ページがJSONを解析し、フラット化し、CSVテキストをブラウザの中で組み立て、結果をダウンロードファイルとして渡します。アップロードの手順も、データを待つサーバーもありません。変換のコードがページと一緒に届き、自分のパソコン上で動くからです。
この主張は約30秒で自分で検証でき、プライバシーに関する主張は検証する価値があるため、検証すべきです。コンバーターを開き、ネットワークから切断するか機内モードをオンにしてから、JSONを貼り付けて変換してください。それでも動きます。変換の何もネットワークを必要としないからです。ページの中でネットワークに触れる唯一のボタンは、任意のURL取得ボタンで、入力したウェブアドレスからJSONを読み込みます。取得の代わりに貼り付けやアップロードを使えば、ネットワークはまったく使われません。
そのため、このページは1回限りの変換や、何もインストールできないパソコンにとって正しいローカル手法です。ページとしての限界は他のページと同じです。ファイルごとにクリックを繰り返す必要があり、非常に大きなファイルではタブが遅くなります。1つのファイルや、1回だけ変換するファイルであれば、その限界は問題になりません。毎週のエクスポートであれば、下のスクリプトに移行し、このページを手早い確認用として残してください。
方法2:Python、パッケージ不要のローカルな働き者
Pythonはほとんどの人にとって最も有用なローカル手法です。ほとんどの開発用パソコンにすでにインストールされており、標準ライブラリだけでも十分だからです。pandasもパッケージも、ダウンロードするものも何もありません。下のスクリプトはオブジェクトのJSONファイルを読み取り、最初のオブジェクトから列名を取り、標準のcsvモジュールでCSVを書き出します。csvモジュールは引用符の処理をそれ自体で正しく行います。json2csv.pyとして保存し、python3 json2csv.py orders.json orders.csvで実行してください。
import json, csv, sys
with open(sys.argv[1]) as f:
rows = json.load(f)
with open(sys.argv[2], 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)このガイド全体で使っているサンプルファイル、id、customer、tagsのフィールドを持つ3つの注文で試したところ、このスクリプトはヘッダー行と3つのデータ行を生成しました。入れ子のcustomerオブジェクトはJSONテキストではなくPythonのrepr文字列として出てきて、tagsのリストもreprのリストとして出てきました。プレーンなDictWriterは入れ子の値をフラット化しないからです。これが短い版の正直な限界です。平らなデータは完璧に変換されますが、入れ子のデータにはもう1つの手順が必要です。フラット化の手順は小さなものです。入れ子のオブジェクトをドット記法のキー、customer.nameやcustomer.cityに変換する短い再帰関数を書き出しの前に加えれば、フラット化のトグルをオンにしたコンバーターのページと同じ列が得られます。
csvモジュールはここで本当の仕事をしています。区切り文字を含むセルを引用符で包み、内側の引用符を2つに増やし、スプレッドシートが期待する行末を書き出します。値をカンマでつなぐことで自分でCSVを作ってはいけません。手作りの結合は、値の中に最初のカンマが現れた時点で壊れ、その壊れは静かです。列がずれるまでファイルは問題なく見えます。標準ライブラリ版はPython 3のあるすべてのパソコンで同じように動くため、同僚にも自分の変換を実行してもらう必要がある場合に選ぶべき手法です。
方法3:jq、ターミナルで暮らす人のためのワンライナー
すでにターミナルを使っているなら、jqは平らなデータについては仕事全体を1行に変えます。JSONを読み取り、最初のオブジェクトからキーをヘッダーとして選び、@csvフォーマッターで引用符処理を行いながらすべての行をCSV行として出力します。スクリプトファイルも、ループも、手動の引用符処理もありません。下のコマンドは平らな注文ファイル、注文ごとにid、city、totalを読み取り、orders.csvに書き出します。限界をはっきり述べておきます。@csvフォーマッターは入れ子のオブジェクトとリストを拒否するため、このワンライナーは平らなエクスポート専用であり、Pythonの節の入れ子サンプルでは間違った表ではなくエラーで失敗します。これは安全な種類の失敗です。
jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ]])[] | @csv' orders-flat.json > orders.csv平らな3つの注文のファイルで試したところ、出力は引用符付きのヘッダー行、"id","city","total"に続き、文字列セルは引用符付きで数値は裸のままの3つのデータ行でした。まさに@csvが生成する形です。keys_unsortedの詳細は重要です。プレーンなkeysでは列がアルファベット順に並べ替えられ、ファイルの列順が変わってしまいます。データに入れ子のオブジェクトがある場合、jqは先にフラット化フィルターが必要で、ワンライナーは小さなスクリプトに成長します。包みをほどいたあと、ほとんどのAPIのリスト応答がすでにそうであるように、平らなエクスポートであれば、ワンライナーが仕事全体であり、jqがインストールされたパソコンならオフラインで動きます。入れ子データの限界はテスト用パソコンで確認済みです。同じフィルターを入れ子サンプルに使うと、間違った表ではなくエラーで失敗します。これは安全な種類の失敗です。
1つの注意点があります。jqはファイル全体をメモリに読み込むため、数ギガバイトのエクスポートはブラウザのタブと同じように負荷がかかります。数十メガバイトまでの通常のエクスポートであれば瞬時に終わります。非常に大きなファイルについては、先にファイルを分割するかストリーミングツールを使い、それを変換とは別の問題として扱ってください。
方法4:Node、変換がプロジェクトの中に住む場合
Nodeは、変換が1回限りの作業ではなくプロジェクトの一部である場合に正しいローカル手法です。ビルド手順、データパイプライン、チームがすでに実行しているスクリプトなどがこれにあたります。NodeにはJSONの解析が組み込まれているため、残りの仕事は行をCSVテキストに変えることだけです。下の小さなスクリプトはドット記法のフラット化ヘルパーを使って行うため、入れ子のオブジェクトがドット記法の列になり、コンバーターのページの動作と一致します。json2csv.mjsとして保存し、node json2csv.mjs orders.json orders.csvで実行してください。
import { readFileSync, writeFileSync } from 'node:fs';
const flatten = (obj, prefix = '', out = {}) => {
for (const [k, v] of Object.entries(obj)) {
const key = prefix ? prefix + '.' + k : k;
if (v && typeof v === 'object' && !Array.isArray(v)) flatten(v, key, out);
else out[key] = Array.isArray(v) ? v.join('; ') : v;
}
return out;
};
const rows = JSON.parse(readFileSync(process.argv[2], 'utf8')).map(r => flatten(r));
const cols = [...new Set(rows.flatMap(r => Object.keys(r)))];
const esc = v => v == null ? '' : /[",\n]/.test(String(v)) ? '"' + String(v).replaceAll('"', '""') + '"' : String(v);
const lines = [cols.join(','), ...rows.map(r => cols.map(c => esc(r[c])).join(','))];
writeFileSync(process.argv[3], lines.join('\n'));同じサンプルで試したところ、このスクリプトはヘッダーid,customer.name,customer.city,totalと3つの行を生成し、入れ子のcustomerオブジェクトは2つの列にフラット化され、tagsのリストはセミコロンと空白でつながれました。エスケープ関数はコンバーターのページと同じ規則に従います。セルに区切り文字、引用符、改行のいずれかが含まれる場合にだけ引用符で包み、内側の引用符は2つに増やします。この規則がCSVの引用符処理の全体であり、これを正しく行うことが、きれいに開くファイルと、静かに列がずれるファイルの違いです。
このスクリプトは実行する前に読めるよう、意図的に短くしています。すべての行にわたる列の和集合を取るため、フィールドのない行は空のセルになり、コンバーターのページと一致します。巨大なファイルのためのストリーミングや列名の変更が必要な場合、それらはこのスクリプトへの追加であり、置き換えではありません。
方法5:すでに持っているツール、VS CodeとオフラインのExcel
すでにそのツールを使っているなら、新しいインストールを必要としないローカル手法があと2つあります。VS Codeでは、拡張機能がコマンドパレットから開いているJSONファイルをCSVに変換します。すでにファイルを編集中の場合、これが最も速いローカル経路です。どの拡張機能か、正確なコマンドは何かを含む完全な手順は、下にリンクしたVS Codeガイドにあります。Excelでは、Power Queryがディスク上のJSONファイルを読み取り、ファイルがパソコンから出ることなく表に変えます。データ、データの取得、ファイルから、JSONからの順に選び、列を展開して読み込みます。どちらもツールがインストールされれば完全にオフラインです。
これらの方法は制御と利便性を交換します。VS CodeとExcelは列の扱いをあなたに代わって決めます。既定値は平らなデータでは通常は問題なく、入れ子のデータではときどき意外な結果になります。出力が間違っているように見える場合、診断は他の場所と同じです。入れ子の値がフラット化されたかJSONテキストのまま残されたかを確認し、開くときの区切り文字を確認してください。1回だけ変換するファイルであれば、どちらかの方法も新しいものをインストールするより優れています。毎週変換するファイルであれば、自分が所有するスクリプトが両方より優れています。
ローカルでは足りない場合と、そのときの対処
ローカル変換には3つの本当の限界があり、それらを挙げておくことで、合わない場所にローカル手法を無理に押し込むことを防げます。1つ目は共同作業です。5人が同じ変換と同じ設定を必要とする場合、5つのスクリプトは少しずつ変わっていき、共有のページは一貫したままです。2つ目はパソコンへのアクセスです。借りたパソコンやロックダウンされたパソコンではPython、jq、Nodeをインストールできないことがあり、その場合でもクライアントサイドのページが依然としてあなたのローカル手法です。3つ目は規模です。メモリより大きなファイルはここにあるすべての手法に負荷をかけ、修正方法はファイルを分割するか1行ずつストリーミングすることであり、別のコンバーターではありません。
忘れられがちな限界もあります。ローカル変換は悪いデータを直しません。スクリプトはファイルに含まれているものを正確に変換します。フィールドの欠落、型の混在、形の不統一も含めてです。同じエクスポートでフィールドがあったりなかったりする場合、このガイドのすべての手法は空白のある列の和集合を返します。これは正直な動作ですが、スプレッドシートが期待するものとは異なる場合があります。可能であれば元のエクスポートを修正し、できない場合は空白を記録してください。
ローカルファイルの衛生管理:CSVを信用する前の4つの確認
ローカル変換は、出力が確認できて初めて完了です。確認は1分もかかりません。1つ目に、元のJSONを残してください。元のファイルを上書きして変換してはいけません。変換は情報を失います。型はテキストになり、入れ子構造は列名になり、CSVだけから元のツリーに戻る方法はありません。2つ目に、並べ替えで分かるように出力に名前を付けてください。orders-2026-10-25.csvはoutput-final-v2.csvより優れており、日付がどのエクスポートから来たかを教えてくれます。元のJSONと同じフォルダーに日付付きの名前で保存しておくと、あとで探す手間も減ります。
3つ目に、行数を数えてください。CSVにはヘッダー行1行にJSONのオブジェクト1つにつき1行があるはずで、手早いカウントで最も多い失敗を捉えられます。それは、行ファインダーが包まれた応答から間違ったリストを選ぶことです。4つ目に、正しい区切り文字でCSVを開いてください。1列として開かれるファイルは、ほとんど壊れたデータではありません。ファイルとスプレッドシートの間の区切り文字の不一致であり、一致する区切り文字で再インポートすれば直ります。コンバーターのページ、Pythonのcsvモジュール、jq、上のNodeスクリプトはすべて、アクティブな区切り文字に従って引用符を付けます。そのため、1列での表示は変換の問題ではなく開く側の問題です。
ローカル変換のトラブルシューティング
同じ4つの問題がすべてのローカル手法で現れ、それぞれに1つの修正方法があります。ファイルが見つからないというエラーは、ターミナルがファイルのあるフォルダーとは違うフォルダーにいることを意味します。他の何よりも先にパスを確認してください。無効なJSONは、報告された位置の近くで元のファイルが壊れていることを意味します。通常は引用符の抜けか末尾のカンマです。検証して元のデータを修正してください。壊れた入力を推測で処理するコンバーターはないからです。1列での表示は、開く側の区切り文字の不一致を意味します。再インポートして、ファイルが書き出された区切り文字を選んでください。
セルに読めないJSONテキストとして入れ子データが現れることは、フラット化が省略されたことを意味します。Pythonの短いスクリプトとjqのワンライナーはフラット化しないため、上のフラット化版を使うか、フラット化のトグルをオンにしたコンバーターのページを使ってください。ファイルと違う順番の列は、ツールがキーを並べ替えたことを意味します。jqはkeys_unsortedが必要で、Nodeスクリプトは最初に現れた順番を保ちます。行がまったく欠けていることは、行ファインダーが意図したものとは違うリストを選んだことを意味します。これは包まれたAPI応答で起きます。ツールをリストそのものに向けるか、まず応答の包みをほどいてください。行数が合わないときは、まずヘッダーとデータ行を分けて数え、包みのフィールドが列になっていないかも確認してください。
関連ガイド
- json to csv converter download:実際にダウンロードすべきもの(2026年ガイド)
- How to JSON to CSV Online: このタブで30秒で変換する方法(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に変換するとはどういう意味ですか?
変換がサーバー上ではなく自分のパソコン上で実行されることを意味します。ブラウザのタブの中で動くクライアントサイドのコンバーターのページ、VS CodeやExcelのようなインストール済みのソフトウェア、あるいはPython、jq、Nodeで自分で実行するスクリプトがこれにあたります。3つの場合すべてで、ファイルが自分のパソコンから出る必要はありません。
このページのコンバーターはローカルですか?
はい。JSONを貼り付けるかアップロードすると、変換はブラウザのタブの中で実行され、結果はダウンロードファイルとして返されます。ネットワークから切断して変換しても動くことで検証できます。それでも動きます。ネットワークを使う唯一のボタンは、入力したアドレスからJSONを読み込む任意のURL取得ボタンです。
JSONをローカルでCSVに変換するために何かをインストールする必要がありますか?
コンバーターのページを使う場合は不要で、何もインストールする必要がありません。繰り返し使えるスクリプトが欲しい場合、Python 3はほとんどの開発用パソコンにすでにインストールされており、標準ライブラリだけでも十分です。jqとNodeはそれぞれ1回のインストールで、インストール後はどちらも完全にオフラインで動きます。
機密データに最適なローカル手法はどれですか?
コードを見ることができる手法であればどれでも問題ありませんが、自分で読んだ短いスクリプトが最も強い選択肢です。隠れたものが何もないからです。機密データで実行する前にスクリプトを読み、元のJSONを残し、ファイルをアップロードするツールよりもクライアントサイドのページやスクリプトを優先してください。
インターネットなしでJSONをローカルでCSVに変換できますか?
はい。コンバーターのページは読み込みさえすればオフラインで動き、Python、jq、Node、VS Code、Excelはすべて完全にオフラインで動きます。接続が必要な唯一の手順はURLからJSONを取得することで、これは任意であり、変換そのものとは別です。
ローカルのCSVが1列で開かれるのはなぜですか?
それは壊れたデータではなく、開く側の区切り文字の不一致です。スプレッドシートが、ファイルが書き出された区切り文字とは違う区切り文字でファイルを分割しました。ファイルを再インポートして一致する区切り文字を選ぶか、セミコロンやタブでCSVを作り直すと、列が表示されます。
ローカルで変換すると情報は失われますか?
はい、他の変換と同じ情報が失われます。値は保たれますが、型はテキストになり、入れ子のオブジェクトはドット記法の列になり、リストはつながれたセルやJSONテキストになります。CSVだけから元のツリーに戻る方法はないため、元のJSONファイルは必ず残しておいてください。
今すぐローカル手法を試してみましょう
このページのコンバーターに任意のJSONを貼り付け、ブラウザのタブの中で変換される様子を見てください。アップロードなし、登録なし、何も自分のパソコンから出ません。あるいはPythonのスクリプトをコピーして、自分のファイルで実行してください。
JSON CSV コンバーターを開く