0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JSONをCSVに変換する方法まとめ(JavaScript / Python / コピペで使える無料ツール)

0
Posted at

APIのレスポンスやログで受け取った JSON を、Excelで開ける CSV にしたい——地味によくある作業です。この記事では、

  • コードで変換する方法(JavaScript / Python
  • コードを書かずにコピペで一発変換する方法

の両方を、そのまま使える形でまとめます。

この記事のゴール:JSONの配列を、ヘッダー付きのCSVに変換できるようになること。


前提:JSONの「配列」がCSVになる

CSVに変換しやすいのは、オブジェクトの配列(各要素が同じキーを持つ)です。

[
  { "id": 1, "name": "田中", "email": "tanaka@example.com" },
  { "id": 2, "name": "佐藤", "email": "sato@example.com" }
]

これは次のCSVに対応します。

id,name,email
1,田中,tanaka@example.com
2,佐藤,sato@example.com
  • オブジェクトのキー → CSVのヘッダー行
  • 配列の各要素 → CSVの1行

ポイントは、値の中に ,(カンマ)・"(ダブルクオート)・改行が含まれる場合のエスケープです。ここを雑にやると、Excelで列がズレます。


方法1:JavaScriptで変換する

ライブラリなしで書けます。エスケープ処理込みの実装がこちらです。

const data = [
  { id: 1, name: "田中", email: "tanaka@example.com" },
  { id: 2, name: "佐藤, 太郎", email: "sato@example.com" } // カンマを含む例
];

function toCSV(rows) {
  if (rows.length === 0) return "";
  const headers = Object.keys(rows[0]);

  // カンマ・改行・"を含む値は " で囲み、" は "" にエスケープ
  const escape = (v) => {
    const s = String(v ?? "");
    return /[",\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
  };

  const lines = [
    headers.join(","),
    ...rows.map((row) => headers.map((h) => escape(row[h])).join(","))
  ];
  return lines.join("\n");
}

console.log(toCSV(data));

出力:

id,name,email
1,田中,tanaka@example.com
2,"佐藤, 太郎",sato@example.com

name にカンマが含まれる行が、きちんと "..." で囲まれているのがポイントです。


方法2:Pythonで変換する

pandasを使う(手軽)

import pandas as pd

data = [
    {"id": 1, "name": "田中", "email": "tanaka@example.com"},
    {"id": 2, "name": "佐藤", "email": "sato@example.com"},
]

df = pd.DataFrame(data)
df.to_csv("output.csv", index=False, encoding="utf-8-sig")

Excelで開くなら encoding="utf-8-sig" がおすすめです。BOM付きになるので、日本語が文字化けしません。

標準ライブラリだけで(pandasなし)

import csv, json

with open("data.json", encoding="utf-8") as f:
    data = json.load(f)

with open("output.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.DictWriter(f, fieldnames=data[0].keys())
    writer.writeheader()
    writer.writerows(data)

csv モジュールがエスケープを自動でやってくれるので安心です。


方法3:コピペで一発変換(コードを書きたくない時)

「1回だけ変換したい」「手元で軽く確認したい」なら、コードを書かずに貼り付けるだけのツールが速いです。

私が作っている Morphy の JSON⇄CSV 変換なら、

  • JSONを貼り付けてボタンひとつでCSVに(逆方向のCSV→JSONも可)
  • Excelからコピーした表(タブ区切り)もそのまま読み込める
  • ネストしたJSONも列に展開
  • 処理はすべてブラウザ内で完結し、データは外部に送信されません(社内データでも安心)

登録不要・無料で、こういう「ちょっとした変換」に使えます。

👉 JSON⇄CSV変換ツールhttps://datamorph.paste-convert.workers.dev/json-csv.html


補足:ネストしたJSONはどうする?

次のように入れ子になっている場合、

[
  { "id": 1, "user": { "name": "田中", "age": 30 } }
]

そのままでは1列に収まりません。**フラット化(平坦化)**して、

id,user.name,user.age
1,田中,30

のように user.name / user.age へ展開するのが定番です。コードでやるなら pandas の json_normalize が便利です。

import pandas as pd
df = pd.json_normalize(data)
df.to_csv("output.csv", index=False, encoding="utf-8-sig")

(前述のMorphyでも、ネストしたJSONは自動で列に展開されます)


まとめ

状況 おすすめの方法
バッチ処理・自動化に組み込む JavaScript / Python
大量データ・繰り返し変換 Python(pandas)
1回だけ・手元でサッと コピペできる無料ツール

用途に合わせて使い分けてください。特に「今すぐ1回変換したいだけ」なら、ツールにコピペするのがいちばん速いです。

この記事が、JSON⇄CSV変換の手間を少しでも減らせたら嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?