Json To Csv LogoJson To Csv

JSONをCSVに変換する方法はある?状況別に選ぶ5つの方法(2026年ガイド)

はい。JSONをCSVに変換する実用的な方法は5つあり、正しい方法は状況によって決まります。1回限りのファイル、表計算ソフトへの出力、繰り返し行う作業、パイプラインのどれかです。ここでは5つすべてを同じファイルでテストした結果と、変換自体が間違った選択になる場合を紹介します。

更新日: 2026-10-179 分で読めます

以下のすべての方法でテストする共通の社員ファイル

多くの変換ガイドは各方法を抽象的に説明しているため、比較することができません。このガイドは逆のやり方を取ります。以下のすべての方法を同じ3件のファイルで実行するため、出力結果を直接比較できます。このファイルは小さいですが、単純ではありません。ネストしたオブジェクト(teamとfloorを含むdept)、リスト(skills)、そして実際の変換でつまずきやすい2つのエッジケース、ブール値(active)と空のリスト(Linaのskillsが空)を含んでいます。

このファイルをきれいに処理できない方法は、実際のファイルもきれいに処理できません。処理できる方法なら、より大きなファイルを任せる前に、出力結果がどうなるかを正確に知ることができます。このファイルを頭に置いて読み進めてください。正しい答えは6列(id、name、dept.team、dept.floor、skills、active)と3行で、Anaのskillsはchat; phone、Linaのskillsは空になります。

staff.json, the shared test file
[
  { "id": 1, "name": "Ana", "dept": { "team": "Support", "floor": 2 }, "skills": ["chat", "phone"], "active": true },
  { "id": 2, "name": "Ken", "dept": { "team": "Sales", "floor": 3 }, "skills": ["email"], "active": false },
  { "id": 3, "name": "Lina", "dept": { "team": "Support", "floor": 2 }, "skills": [], "active": true }
]

方法1:オンラインコンバーター — インストール不要の方法

無料のオンラインJSONからCSVへのコンバーターを開き、JSONを貼り付けるかファイルをアップロードして、CSVをダウンロードします。方法はそれだけです。一度きりのファイルであれば、これが正しい方法です。インストールするものは何もなく、覚えることもなく、1分以内に結果が得られます。このサイトのコンバーターはブラウザーの中だけで動作するため、ファイルがお使いのマシンから外に出ることはありません。また、フラット化の切り替えによって、ネストしたデータをどう扱うかが決まります。

フラット化をオンにすると、社員ファイルはまさに上記の6列の答えに変換されます。deptはdept.teamとdept.floorになり、skillsのリストはセミコロン区切りで1つのセルに結合され、Linaの空のリストは空のセルになります。フラット化をオフにすると、同じファイルでもdeptとskillsが1つのセルの中にJSONテキストとして残ります。有効なCSVではありますが、並べ替えやフィルターができる表にはなりません。JSONをCSVにフラット化する方法についての以前のガイドでは、この切り替えをセルごとに、エッジケースも含めて解説しています。

正直な限界もあります。オンラインコンバーターは一度に1ファイルだけのツールです。毎朝50ファイルを変換する必要がある場合や、変換を別のプログラムの中で行わなければならない場合は、以下の方法のほうが適しています。また、分析したいのがリストそのもの、つまり1人1行ではなく1スキル1行である場合、オンラインコンバーターでは対応できません。その場合は、JSONデータをフラット化する方法についてのガイドにある展開(エクスプロード)の手順が必要です。

Way 1 output: online converter, flattening on (verified)
id,name,dept.team,dept.floor,skills,active
1,Ana,Support,2,chat; phone,true
2,Ken,Sales,3,email,false
3,Lina,Support,2,,true

方法2:すでにお持ちの表計算ソフト — Excel Power Query

CSVの行き先が結局は表計算ソフトであるなら、コンバーター自体が不要な場合があります。ExcelはPower Queryを通じてJSONを直接読み込むことができます。空白のブックを開き、データ、データの取得、ファイルから、JSONからの順に進み、ファイルを選ぶと、Power Queryにレコードが表示されます。dept列を展開すると、ネストしたオブジェクトがteam列とfloor列にフラット化され、skills列は、1スキル1行にしたいか、1つのセルに結合したいかによって展開または抽出を選び、閉じて読み込むと、結果がフィルターやピボットができる本物のExcelテーブルとして表示されます。

始める前に知っておきたいことが2つあります。1つ目は、展開の手順はネストした列ごとに行うことです。3段階のネストがあるファイルでは3回の展開が必要で、1つ見逃すとRecordの値が入った列が残ってしまいます。2つ目は、完成したCSVをExcelで開くこと自体にも落とし穴があることです。UTF-8のファイルが文字化けして開くことがあり、007のような値は先頭のゼロが消えることがあります。だからこそ、JSONからCSVを作る方法についてのガイドでは、再インポートによる検証の習慣を勧めています。結果を開き、文字を確認し、コードを確認して、それから完了と言えます。

この方法で唯一の穴がGoogleスプレッドシートです。スプレッドシートにはネイティブのJSONインポート機能がありません。ファイル、インポート、JSONという選択肢は存在しません。実用的な方法は、まずオンラインコンバーターを通して貼り付けるか、JSONを取得して解析する小さなApps Scriptを書くことです。すでにスプレッドシートの中にいるなら、コンバーター経由のほうが速く、インポートを毎日繰り返す必要があるなら、スクリプトのほうが勝ちます。

方法3:すでに使っているコード — Pythonまたはjq

すでにコードを書いているなら、Pythonとjqが2つの主力ツールですが、1つの示唆的な点で意見が分かれます。Pythonのpandasのjson_normalizeは、ネストしたオブジェクトを自動的にドット記法の列にフラット化します。deptは追加の手順なしにdept.teamとdept.floorになります。しかし、リストは自分で結合しない限りPythonのrepr文字列のまま残ります。結合せずに実行すると、Anaのskillsセルはリストをテキストとして出力したものになり、使える値にはなりません。1行の結合による修正は下のスニペットにあり、修正後の出力はオンラインコンバーターと完全に一致します。

jqは逆のアプローチを取ります。自動では何もせず、すべての列を明示的に指定します。各フィールドを自分で指定し、結合方法を自分で選び、書いた通りのヘッダー行が得られます。この明示性こそが、扱いにくいファイルを一度だけ変換する際のjqの本当の強みであり、幅の広いファイルに対する弱みでもあります。40個のフィールドがあるレコードでは、40個の式が必要になります。社員ファイルでは、どちらのツールも同じ6列3行を生成します。それが要点です。方法は変わっても、正しい答えは変わりません。

繰り返し行う場合について、Pythonの注意点をもう1つ挙げます。json_normalizeにexplodeを組み合わせると、リストが1アイテム1行に展開されます。これはオンラインコンバーターにはない展開の動きです。分析で1スキル1行が必要なら、この手順が答えです。検証済みのjqによる同等の方法も含め、JSONデータをフラット化する方法についてのガイドで詳しく解説しています。

Way 3 output: Python, json_normalize plus join (verified)
import json
import pandas as pd

rows = json.load(open('staff.json'))
df = pd.json_normalize(rows)
df['skills'] = df['skills'].apply(lambda v: '; '.join(v))
df.to_csv('staff.csv', index=False)

# staff.csv:
# id,name,skills,active,dept.team,dept.floor
# 1,Ana,chat; phone,True,Support,2
# 2,Ken,email,False,Sales,3
# 3,Lina,,True,Support,2

方法3の続き:jqワンライナー

同じ変換のjq版は1つのコマンドです。ヘッダー行は手で書き出し、各レコードが1行に対応します。ネストしたフィールドはドットで指定し(dept.team)、リストはセミコロンで結合し、引用符の処理は@csvに任せます。社員ファイルで実行すると、Python版と同じ3行が得られますが、見た目の違いが1つだけあります。jqはすべての文字列フィールドを引用符で囲むため、ヘッダー行はid,name,...ではなく引用符付きの形で表示されます。どちらも有効なCSVであり、すべての表計算ソフトとパーサーが同じように読み込みます。

jqが居場所を得る理由はもう1つあります。エディターで開けないほど大きなファイルでも動作することです。上記のワンライナーはファイル全体をメモリに読み込むため、数十メガバイトまでなら問題ありませんが、jqにはファイルをレコードごとに処理するストリーミングモード(--streamフラグ)もあります。JSONファイルが数百メガバイトある場合、ストリーミングjqか、分割して処理するPythonスクリプトが正解です。ブラウザーのタブではありません。

Way 3 output: jq, explicit columns (verified)
jq -r '(["id","name","dept.team","dept.floor","skills","active"] | @csv),
  (.[] | [.id, .name, .dept.team, .dept.floor, (.skills | join("; ")), .active] | @csv)' staff.json

# "id","name","dept.team","dept.floor","skills","active"
# 1,"Ana","Support",2,"chat; phone",true
# 2,"Ken","Sales",3,"email",false
# 3,"Lina","Support",2,"",true

方法4:エディター — VS Code

すでにVS Codeで作業しているなら、エディターを離れずに変換できます。最も速い方法は統合ターミナルです。フォルダーを開き、VS Codeの中でターミナルを開いて、方法3のPythonまたはjqコマンドを実行すると、出力CSVが同じフォルダーに現れ、VS CodeのExcelビューアー拡張機能や組み込みプレビューですぐに確認できます。コマンドよりクリックが好みの場合は、Rainbow CSVやJSONからCSVへの拡張機能などの拡張機能が、コマンドパレットから開いているファイルを変換します。

エディター経由の本当の利点は反復作業です。JSONが編集中の設定ファイルやAPIレスポンスである場合、その場で変換することで文脈の中に留まることができ、エディターの差分表示で何が変わったかを正確に確認できます。拡張機能、ターミナル、ワンキー操作のタスクを含む完全な手順は、VS Codeガイドにあります。落とし穴(ネストしたデータを文字列化してしまう拡張機能、間違ったフォルダーに書き出すターミナル)も含まれています。短くまとめると、VS Codeは変換に適した場所ですが、変換そのものは他の方法がエディターの姿を借りているにすぎません。

方法5:自分のアプリの中で — ライブラリ呼び出し

5つ目の方法は、変換が一度きりの作業ではなく、構築中の何かの一部である場合、つまりダッシュボードのエクスポートボタン、夜間のレポート、データパイプラインの場合です。その場合はツールを探すのではなく、関数を呼び出します。下のスニペットがその核心です。JavaScriptで、ドット付きの列名をたどり、リストの値を結合し、カンマ、引用符、改行を含むものを引用符の倍増とセル全体の囲みでエスケープします。社員ファイルで実行すると、オンラインコンバーターとまったく同じ行が生成されます。これは偶然ではありません。このサイトのコンバーターエンジンも同じ考え方で、エッジケース(不揃いな行、ネストしたリスト、空のオブジェクト)に対応しています。

ここでの判断は、自作するか借りるかです。正直な答えは、たいてい借りることです。pandasのjson_normalize、お使いの言語のCSVライブラリ、あるいは下のコンバーターエンジンのパターンは、エッジケースへの対応で手作りの版に勝ります。自作すべきなのは、ライブラリにないルールが変換に必要な場合だけです。独自のフラット化の仕組み、ドメイン固有の結合方法、ストリーミングの要件などが該当します。また、変換がサーバー上で実行される場合は、プライバシーの違いを忘れないでください。ブラウザーのコンバーターはファイルをユーザーのマシンに留めますが、サーバーのコンバーターはデータを見ることになります。

Way 5 output: a library call in JavaScript (verified)
const rows = require('./staff.json');
const cols = ['id', 'name', 'dept.team', 'dept.floor', 'skills', 'active'];
const get = (r, p) => p.split('.').reduce((o, k) => o?.[k], r);
const esc = v => { const s = String(v ?? '');
  return /[",\n]/.test(s) ? '"' + s.replace(/"/g, '""') + '"' : s; };
console.log(cols.join(','));
for (const r of rows)
  console.log(cols.map(c => esc(c === 'skills' ? (get(r, c) || []).join('; ') : get(r, c))).join(','));

# id,name,dept.team,dept.floor,skills,active
# 1,Ana,Support,2,chat; phone,true
# 2,Ken,Sales,3,email,false
# 3,Lina,Support,2,,true

うまくいく方法がない場合

はいとしか言わないガイドは、省略による嘘をついていることになります。CSVへの変換が間違った選択になるファイルがあり、それを知ることは、どんなツールよりも時間を節約します。1つ目は、深くネストしたデータやグラフ状のデータです。コメントの中に返信が含まれ、その返信の中にさらに返信が含まれるコメントスレッドや、互いに参照し合うレコードが該当します。これを列にフラット化すると、数百のまばらな列か、情報の欠けた要約のどちらかになります。正直な答えは、JSONのまま残すか、フラット化せずにjqでクエリすることです。

2つ目は、スキーマが混ざったファイルです。あるレコードには他のレコードにないキーがある場合や、同じキーが、あるレコードでは文字列、別のレコードではオブジェクトになっている場合です。コンバーターはすべてのキーの和集合を取って空のセルを残すことで対応します。これは正しいのですが、たいてい役に立ちません。結果の表はほとんど穴だらけになります。変換する前に、レコードが本当に同じ種類のものかどうかを考えてください。違う場合は、まずファイルをレコードの種類ごとに分割し、それぞれを変換します。

3つ目は規模です。手元のツールには大きすぎるファイルです。ブラウザーのコンバーターは数十メガバイトあたりで詰まり、エディターのインポートは止まり、pandasですら遅くなります。対処法は、より優れたコンバーターではなく、異なる形です。ファイルを分割するか、jq --streamでストリーミング処理するか、CSV自体をやめてJSON Lines(1行に1つのJSONオブジェクト)のままにすることです。JSON Linesは自然にストリーミングでき、クエリも可能です。大きなJSONをオンラインでCSVに変換する方法についてのガイドでは、サイズの問題を詳しく扱っています。

どの方法を選ぶべきか?

ツールの評判ではなく、状況に合わせて選んでください。1つのファイルを1回だけ、すぐに終わらせたい場合:方法1のオンラインコンバーターです。結果を、その後も作業を続ける表計算ソフトに入れる場合:方法2のPower Queryです。すでにコードを書いていて、ファイルが扱いにくい場合や変換を繰り返す場合:方法3のPythonまたはjqです。VS Codeでファイルを編集中の場合:方法4の統合ターミナルです。変換を出荷するソフトウェアの中で行わなければならない場合:方法5のライブラリ呼び出しです。

残りのほとんどの場合を決める決め手が2つあります。プライバシーが重要なら、顧客データ、認証情報、メールで送りたくないものなどがファイルに含まれるなら、データをマシンに留める方法を優先してください。ブラウザーのコンバーター、ローカルのスクリプト、エディターのいずれかです。ファイルが巨大なら、ストリーミングする方式を優先してください。jq --streamか、分割して処理するPythonスクリプトであり、ブラウザーのタブではありません。それ以外は好みと習慣の問題であり、形の整ったファイルであれば、5つの方法のどれでも同じ正しいCSVが得られます。

すべての方法が決めなければならないこと

どの方法を選んでも、4つの判断がその中に隠れています。これらに異なる答えを出した2つのファイルから作られたCSVは、同じCSVではありません。フラット化:ネストしたオブジェクトをドット付きの列にするか、セルの中のJSONテキストとして残すか。区切り文字:カンマ、セミコロン、タブ、パイプのどれか、そして表計算ソフトは同じものを期待しているか。ヘッダー行:列名を含めるか、そしてその名前は下流のツールが期待するものか。エンコーディング:プレーンなUTF-8か、そして表計算ソフトはそれをUTF-8として開くか、それとも別のものとして開くか。

これらは高度な話題ではありません。CSVが1回目で正しく開くか、5回目でやっと開くかを決める判断です。JSONからCSVを作る方法についてのガイドでは、生データを実用的なファイルに変える7つの判断をすべて解説し、それぞれを実際のコンバーターでテストしています。一度読めば、その後のすべての変換が速くなります。

関連ガイド

よくある質問

JSONをCSVに無料で変換する方法はありますか?

はい。このガイドの5つの方法はすべて無料です。オンラインコンバーターは登録なしで無料、Excel Power QueryはExcelに含まれ、Pythonとjqは無料のオープンソース、VS Codeは無料、JavaScriptの方法は標準ライブラリだけを使います。JSONをCSVに変換するためにお金を払う必要は決してありません。

インストールなしでJSONをCSVに変換する方法はありますか?

はい。無料のオンラインコンバーターを使ってください。ブラウザーでJSONを貼り付けるかファイルをアップロードし、CSVをダウンロードします。このサイトのコンバーターはブラウザーの中だけで動作するため、何もインストールせず、ファイルがマシンから外に出ることもありません。ファイルがすでにお持ちの表計算ソフトで開いている場合は、Power Queryもインストール不要です。

コードを書かずにJSONをCSVに変換する方法はありますか?

はい。2つあります。オンラインコンバーターはコードがまったく不要です。貼り付け、変換、ダウンロードだけです。Excel Power Queryもコード不要です。JSONファイルをインポートし、クリックでネストした列を展開し、結果をテーブルとして読み込みます。コードが役立つのは、変換を繰り返す必要がある場合や、ファイルが扱いにくい場合だけです。

ExcelでJSONをCSVに変換する方法はありますか?

はい。Power Queryを使います。データ、データの取得、ファイルから、JSONからの順に進みます。各ネストした列を展開してオブジェクトをドット付きの列にフラット化し、リスト列は1アイテム1行にしたいか1つのセルに結合したいかによって展開または抽出を選び、閉じて読み込みます。Googleスプレッドシートには同等のネイティブのインポート機能がありません。オンラインコンバーターを通して貼り付けるか、小さなApps Scriptを使ってください。

大きなJSONファイルをCSVに変換する方法はありますか?

はい。ただしブラウザーのタブの中ではありません。数十メガバイト以上のファイルには、jqのストリーミングモード(jq --stream)を使います。ファイル全体を読み込むのではなく、レコードごとに処理します。あるいは、バッチ単位で読み書きする分割処理のPythonスクリプトを使います。ファイルが数百メガバイトある場合は、CSVではなくJSON Lines(1行に1つのJSONオブジェクト)のまま残すことも検討してください。

ネストしたデータをそのまま残してJSONをCSVに変換する方法はありますか?

はい。フラット化をオフにして変換します。ネストしたオブジェクトとリストは1つのセルの中のJSONテキストとして残るため、何も失われません。ただし、結果は並べ替え可能な表にはなりません。実際の列と情報の損失なしの両方が必要なら、分析する部分をフラット化し、残りをJSONテキストとして残すか、必要なリストを1アイテム1行に展開してください。

CSVをJSONに逆変換する方法はありますか?

はい。逆向きの変換も同じくらいよく対応しています。CSVをJSONに変換する方法についてのガイドでは、信頼できる3つの方法、オンラインコンバーター、Pythonとpandasのスニペット、そしてExcelやGoogleスプレッドシートを経由する正直な2段階の方法を紹介しています。どちらもJSONをネイティブにエクスポートしないためです。フラット化、区切り文字、ヘッダー、エンコーディングという同じ4つの判断が、逆向きにも当てはまります。

1ファイル、1分、インストール不要

JSONを貼り付けるかファイルをアップロードしてください。ネストしたオブジェクトはドット記法の列にフラット化され、リストはきれいなセルに結合され、ダウンロードされるのはプレーンなUTF-8です。無料、登録不要、ブラウザーの中だけで動作します。

JSONからCSVへのコンバーターを開く
ガイド一覧