私が書いた最初の JSON-CSV コンバーターは、本番環境で 3 日間続きました。
それは " export to spreadsheet" laravel管理パネルのボタンで、私の変換ロジックは - I' これを誇りに思っていません - でした values.join(",")。 テストを通過しました。 次に、ユーザーが顧客リストをエクスポートし、1 つの企業が「スミス、ジョーンズ、パートナー」と名付けられ、その後、1 つの企業が右に 1 ポジションを移動した後のすべての列がエクスポートされました。 会計士は、メールの列に電話番号が記載されていることに気付く前に、340 行のずれているデータをインポートしました。
CSV のコンマは、文字列結合できる区切り記号ではありません。 文法で定義されています。 RFC 4180、実際のエスケープ ルールを使用します。 そのバグが理由です JSON から CSV へのコンバータ 私は後に Toolz.dev のために構築しました。escaping は交渉不可能として扱われます。そして、このガイドがハッピー パスだけでなくエッジ ケースにリアルタイムで費やす理由についても説明します。
私が実際に使用する 5 つの方法、それぞれが勝ったとき、どこで噛むかは次のとおりです。
tl;dr: 1 回限りの変換を行うには、JSON を Toolz.dev JSON から CSV へのコンバーター ネストしたオブジェクトをドット表記で平坦化し、RFC 4180 ごとに正しくエスケープし、ブラウザで100% 実行します。 recurring jobsの場合は、次のようにスクリプト化します:
pd.json_normalize()Python またはjson2csvノード内のパッケージ。 で検証する JSON フォーマッタ まず、元の JSON を維持します。CSV の平坦化は一方通行です。
すでに JSON を持っているのに、なぜ CSV が必要なのですか?
あなたのデータを必要とする人は、あなたのターミナルに住んでいないからです。 私がこれまでに受け取った変換リクエストはすべて、次の 5 つの状況のうちの 1 つに減ります。
アナリストはスプレッドシートで働きます。 Excel、Google スプレッドシート、Tableau、Power BI - これらはすべて CSV をネイティブに吸入し、ネストされた JSON を窒息させます。 API 出力を CSV に変換することは、エンジニアリング データがビジネス側に届く方法です。
データベース フラット ファイルを一括インポートします。 PostgreSQL の COPY そしてMySQL LOAD DATA 表形式の入力が必要です。 JSON 列は存在しますが、実際のリレーショナル テーブルにロードすると、最初に平坦化することを意味します。
移行には、リンガ フランカが必要です。 NoSQL ストアとリレーショナル ストア間、または 2 つの SaaS プラットフォーム間でデータを移動する CSV は、両端が確実に理解できる形式です。
コンプライアンスはフラット ファイルが好きです。 アーカイブ要件によっては、人間が読める形式を指定します。 CSV は、何十年も前から何でも開きます。
利害関係者は JSON を読むことができません。 プロダクト マネージャーは、「スプレッドシートとして入手できますか?」と尋ねるのが、最も一般的なトリガーです。 壊れたエクスポート ボタンのトリガーでした。

JSON から CSV への変換が難しくなった理由は何ですか?
フラット JSON は簡単です。 これ:
[
{"id": 1, "name": "Alice", "email": "[email protected]", "age": 30},
{"id": 2, "name": "Bob", "email": "[email protected]", "age": 25}
]
これになり、ヘッダーのキー、行への要素:
id,name,email,age
1,Alice,[email protected],30
2,Bob,[email protected],25
しかし、実際の API の応答は決して平坦ではありません。 次のようになります。
[
{
"id": 1,
"name": "Alice",
"address": {"street": "123 Main St", "city": "San Francisco", "state": "CA"},
"skills": ["JavaScript", "Python", "Go"]
}
]
CSV には「内部」という概念がないため、フラット化戦略を選択すると、それぞれにコストがかかります。
ドット表記の平坦化- ネストされたキーは複合ヘッダーになります:
id,name,address.street,address.city,address.state,skills
1,Alice,123 Main St,San Francisco,CA,"JavaScript; Python; Go"
配列のインデックス付き列ー skills.0、 skills.1、 skills.2。 予測可能ですが、14 のスキルを持つレコードは、全員に 14 の列を生成します。
JSON でエンコードされたセルー 生のJSONをセルに詰め込み 二重引用符で囲みます 損失がなく、読めず、アナリストが悲しむほどです。
結合された配列によるドット表記は、人間が消費するのに適切なデフォルトです - it'何 Toolz.dev コンバータ 生産します。 下流のコードがアドレス指定可能な各要素が必要な場合、インデックス付き列が勝ちます。 JSON-in-Cells は往復の最後の手段です。
方法 1: JSON をオンラインで CSV に変換するにはどうすればよいですか?
最適: 1 回限りのコンバージョン、非開発者、数十 MB 未満のすべて。
- を開きます JSON から CSV へのコンバータ。
- JSON (オブジェクトの配列、または 1 つのオブジェクト) を貼り付けます。
- このツールは構造を検出し、ネストされたオブジェクトをドット表記に平坦化し、CSV を即座にレンダリングします。
- コピーするか、ダウンロードしてください
.csv。
私が非定期的なものに対してスクリプト上でこれをデフォルトにする理由: セットアップゼロ、正しい RFC 4180 エスケープ (その教訓を学んだ)、一貫性のないオブジェクト間での自動キー結合、そして - it's クライアント側 - 貼り付けたばかりの顧客メールでいっぱいの API 応答がマシンから離れることはありません。ネットワーク タブを見てください。 if you don't believe me; that's テスト 私はすべてのオンライン コンバーターに適用しますが、ほとんどの場合は失敗します。
間違ったツールです。繰り返しの変換 (スクリプト化) と、平坦化戦略を手作業で選択したい場合に、極度に病的なネストをする必要があります。

方法 2: JavaScript で json を CSV に変換するにはどうすればよいですか?
最適: パイプライン、ノード サービス、カスタム変換ロジックを構築します。
Here& #39; s 最小の正しいバージョン - 脱出に注意してください、これは私の3 日間の災害がスキップした部分です:
function jsonToCsv(jsonArray) {
if (!jsonArray.length) return "";
const headers = Object.keys(jsonArray[0]);
const csvRows = [
headers.join(","),
...jsonArray.map(row =>
headers.map(header => {
const value = row[header] ?? "";
// RFC 4180: double embedded quotes, wrap anything containing , " or newline
const escaped = String(value).replace(/"/g, '""');
return /[,"\n\r]/.test(escaped) ? `"${escaped}"` : escaped;
}).join(",")
)
];
return csvRows.join("\n");
}
ネストされた入力では、まずフラット化し、キーをユニオンします - 最初のオブジェクトのみからヘッダーを取得することは、手巻きコンバーターで2 番目に一般的なバグです:
function flattenObject(obj, prefix = "") {
const result = {};
for (const [key, value] of Object.entries(obj)) {
const newKey = prefix ? `${prefix}.${key}` : key;
if (value && typeof value === "object" && !Array.isArray(value)) {
Object.assign(result, flattenObject(value, newKey));
} else if (Array.isArray(value)) {
result[newKey] = value.join("; ");
} else {
result[newKey] = value;
}
}
return result;
}
function nestedJsonToCsv(jsonArray) {
const flattened = jsonArray.map(item => flattenObject(item));
// Union of ALL keys, not just the first object's
const headers = [...new Set(flattened.flatMap(Object.keys))];
// ...then emit rows exactly as in jsonToCsv above
}
または、手巻きをスキップします json2csv パッケージは、何年もの間、これらのエッジを処理してきました。
import { Parser } from "json2csv";
const parser = new Parser({ flatten: true });
const csv = parser.parse(data);
方法 3: Python で json を CSV に変換するにはどうすればよいですか?
最適: データ サイエンス ワークフロー、パンダに触れたものはすべてです。
Pandas のワンライナーは、フラットな JSON をカバーします。
import pandas as pd
df = pd.read_json("data.json")
df.to_csv("output.csv", index=False)
本当に便利な機能は pd.json_normalize()ーネストされたAPIレスポンスのために専用に構築されています:
import pandas as pd
import requests
response = requests.get("https://api.example.com/users")
df = pd.json_normalize(response.json())
print(df.columns.tolist())
# ['id', 'name', 'skills', 'address.street', 'address.city', 'address.state']
# Arrays still need a decision — join them explicitly:
df["skills"] = df["skills"].apply(lambda x: "; ".join(x) if isinstance(x, list) else x)
df.to_csv("output.csv", index=False)
注意してください json_normalize ネストされたフラットテン 物 でも葉っぱ 配列 python リストとして - 結合ステップをスキップすると、CSV セルには次の内容が含まれます ['JavaScript', 'Python'] 逐語的。 みんなこれで一度は打つ。
パンダはありませんか? 標準ライブラリは、フラットな json を処理します。
import json, csv
with open("data.json") as f:
data = json.load(f)
with open("output.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
方法 4: コマンドラインから json を CSV に変換するにはどうすればよいですか?
最適: シェル スクリプト、CI パイプライン、パンダのインストールがやり過ぎのサーバー。
jq ネイティブでやってる @csv、正しくエスケープします。
cat data.json | jq -r '
(.[0] | keys_unsorted) as $keys |
($keys | @csv),
(.[] | [.[$keys[]]] | @csv)
'
csvkit's in2csv 低考えオプションは次のとおりです。
pip install csvkit
in2csv data.json > output.csv
そしてミラー(mlr) 同じパスでフィルタリングしたいときに輝きます。
mlr --json2csv filter '$age > 25' data.json > output.csv
構成可能性はポイント - curl -s api.example.com/data | jq ... > report.csv は、1 つの Cron に完全な API からスプレッドシートへのパイプラインです。
方法 5: JSON を Excel または Google スプレッドシートに直接インポートできますか?
最適: 非開発者、ライブ更新データ、1 回限りのインポート。
エクセル: データ → データの取得 → Web から、API URL を貼り付け、Power Query を使用すると、読み込み前にネストされたレコードを展開するビジュアル エディタが表示されます。 同じソースの繰り返しの更新に本当に適しています。
Google スプレッドシート: 拡張機能 → アプリ スクリプト、次に小さなフェッチ関数:
function importJSON(url) {
const response = UrlFetchApp.fetch(url);
const data = JSON.parse(response.getContentText());
if (!Array.isArray(data) || data.length === 0) return [["No data"]];
const headers = Object.keys(data[0]);
const rows = data.map(item => headers.map(h => item[h] ?? ""));
return [headers, ...rows];
}
セルで使用される =importJSON("https://api.example.com/data")。
正直な言い方: 1 回限りの輸入の場合、 オンライン ツール そして、CSV を開くのはどちらよりも高速です。 スプレッドシート ネイティブ ルートは、データがスケジュールに従って更新された場合にのみ、セットアップ コストを獲得します。
どの方法を選ぶべきですか?
| 方法 | 設定 | ネストされた JSON | 繰り返し使用 | データはローカルのままです |
|---|---|---|---|---|
| オンラインコンバーター | なし | 自動 | 毎回マニュアル | はい - クライアント側 |
| JavaScript / JSON2CSV | npm インストール | 経由 flatten |
素晴らしい | はいって |
| パイソン/パンダ | ピップインストール | json_normalize |
素晴らしい | はいって |
| JQ/CSVKit/MLR | パッケージマネージャー | 手動パス | 優れた (cron/ci) | はいって |
| エクセル/シート | アカウント/アプリ | パワー クエリ UI | 良い (自動更新) | Excel: はい、シート: Google サーバー |
私のルール: 3 回目までブラウザ ツールに手を伸ばします。I'同じ形状のデータを変換すると、スクリプトになります。
JSON から CSV への変換を中断するエッジ ケースは何ですか?
デバッグしたほぼすべてのエクスポートが 4 つのトラップで考慮されます。
一貫性のないキー。 オブジェクト 1 は email、オブジェクト 2 は phone、オブジェクト3 は両方を持っています。 最初のオブジェクトからのみヘッダーを取り、あなたは静かにデータをドロップします。 fixは、すべてのオブジェクトにわたるキーユニオンであり、欠落している値は空のセルとして - 優れたツールは自動的に行います。
逃がしのない特殊文字。 「スミス、ジョーンズ、パートナー」の問題。 RFC 4180 あたり: 二重引用符で囲んだ値をコンマ、引用符、または改行で含むラップ値をラップし、埋め込み引用符を 2 倍にします ("He said ""hello""".
大きなファイル。 100 MB 程度を過ぎると、ファイル全体の解析に苦痛が伴います。代わりにストリーミング - jq ストリーム、パンダのチャンクでの読み取り、JSON 行のフォーマット (1 行につき 1 つのオブジェクト) を使用すると、両方が簡単になります。 数十 MB までのファイルの場合、アップロードがないので、ブラウザ ツールは問題ありません。
エンコーディング。 名前と住所には、ASCII 以外の文字が含まれています。 UTF-8 をすべてエンドツーエンドに保ち、歴史的に BOM が UTF-8 を正しく検出することを望んでいた Windows 上の Excel を疑ってください。
そして、オプションではない 1 つの練習: 変換する前に検証してください。 切り捨てられた JSON ファイルは、混乱を招くほど変換の途中で失敗しますが、明らかに JSON フォーマッタ。 検証の 30 秒は、「なぜ私の CSV が空なのか」を 10 分に上回ります。
よくある質問
JSON をオンラインで CSV に無料で変換するにはどうすればよいですか?
JSON に貼り付けます。 ツールズ.dev の JSON から CSV へのコンバータ- ネストされたオブジェクトがフラット化され、エスケープが処理された状態で CSV を即座に生成し、結果をコピーまたはダウンロードできます。サインアップはなく、処理は 100% クライアント側であるため、データがブラウザから離れることはありません。
ネストされた JSON を CSV に変換できますか?
はい。 ネストされたオブジェクトは、ドット表記ヘッダーに平坦化されています (address.city)、配列は区切り文字列に結合するか、インデックス付きの列に分割されます。 ザ・ Toolz.dev コンバータ ドット表記を自動的に適用します。Python では、 pd.json_normalize() 同じことをします。
Python で json ファイルを CSV に変換するにはどうすればよいですか?
import pandas as pd; pd.read_json("data.json").to_csv("output.csv", index=False) フラットな JSON 用。 ネストされた構造の場合は、 pd.json_normalize(data) まず、正規化するとリストはそのまま残されるため、配列列には必ず自分で参加してください。
非常に大きな JSON ファイルを変換する最良の方法は何ですか?
ロードするのではなく、ストリームする: jq コマンドライン、またはチャンクの読み取りのパンダ。 ファイルを最初に JSON 行に変換する (1 行につき 1 つのオブジェクト) と、ストリーミングがより簡単になります。 ブラウザ ツールは、最大数十 MB まで快適です。100 MB を超える場合は、コマンド ラインを使用します。
CSV を JSON に戻すにはどうすればよいですか?
ザ・ CSV から JSON へのコンバータ トリップを反転します - 各行はヘッダー行によってキー付けされたオブジェクトになります プログラム的には: pd.read_csv("data.csv").to_json(orient="records")。
CSV にいくつかの値に関する引用があるのはなぜですか?
これはバグではなく、正しい動作です。 RFC 4180 では、引用符が 2 倍にされた、カンマ、改行、または引用符を含む任意の値を二重引用符で囲む必要があります。 スプレッドシートとパーサーは、読み取り時にそれらをストリップします。
JSON から CSV への変換は無損失ですか?
フラット JSON の場合、はい。ネストされた JSON の場合、値は存続しますが、階層は存続します ' t - ドット表記ヘッダーはフラット化されます 表現である場合、元のネストを正確に再構築できるとは限りません。 ソース JSON を保持し、CSV を派生ビューとして扱います。
変換後に列がずれているのはなぜですか?
ほぼ常にエスケープ失敗: コンマを含む値 wasn' t quoted なので、パーサーはその時点から余分な列を見ます。 it' s 私のLaravelエクスポートボタンからの正確なバグ。 string-joining値ではなく、RFC 4180 を実装するコンバーターを使用します - そして、あなたがあなた自身のものを書いたならば、のような値でそれをテストしてください Smith, Jones & Partners。
Excel または Google スプレッドシートで JSON を CSV に変換するにはどうすればよいですか?
どちらのアプリも、ペーストではなくヘルパーを介して JSON をインポートします。 Excel で、データ → データを取得 → ファイルから → JSON から、クエリを平坦化して、[閉じる] を使用して、[ロード] を使用します。 Google スプレッドシートで、一時的な Apps スクリプトを介して小さな配列を貼り付けるか、 JSON から CSV へのコンバータ 最初に、結果のファイルを開きます - 通常、ワンオフのより速いパスです。
どの JSON から CSV メソッドを使用すればよいですか?
1 回限りの迅速な場合、クライアント側のコンバーターが最も高速で、データを非公開にします。 繰り返し可能なパイプラインの場合は Python と Pandas を使用して、巨大なファイルの場合は、 jq コマンド ラインで、スプレッドシートのインポートに到達するのは、非開発者がワークフローを所有している場合のみです。 ファイルのサイズだけではなく、その作業を繰り返す頻度にツールを合わせてください。
メソッドをジョブに合わせる
JSON-to-CSV は、会社名のカンマが顧客データ 340 行を 1 列右にシフトするまで、解決済みのワンライナーのように見えます。 この方法は、RFC 4180 ごとの脱出、キーの結合、目的の平坦化戦略の決定、および元の JSON のままにします。
次の 1 回限りの変換では、 JSON から CSV へのコンバータ は 15 秒のパスです。 で最初に検証します JSON フォーマッタと、データを戻す必要がある場合、 CSV から JSON へのコンバータ ループを閉じます。3 つすべてがブラウザーにあり、どのブラウザーもデータ サーバー側に表示されません。
関連記事:
- JSON ツールの究極のガイド (2026)
- JSON をオンラインでフォーマットする方法: 例を含む完全なガイド
- 無料のオンライン テキスト ツール ガイド



