JSON to CSV (for Excel)
https://qiita.com/kyoh86/items/9bd0b6752567ed37dd28
Node.jsでExcel⇒JSON、JSON⇒Excel変換するサンプル
https://qiita.com/TakumiKondo/items/ca522bff3307034bbcd6
CSV/JSONを扱う際にオススメのVSCode拡張機能
https://qiita.com/_whitecat_22/items/63cc60228853d97edb06
excel_to_csv_converter.py
https://qiita.com/foruniverse4u/items/248040d1aebfd327617a
ChatGPT
json to csv https://qiita.com/kaizen_nagoya/items/8c816431fcdecfd1dde9 にあるように、jsonファイルをcsvファイルに変換しようとしています。お勧めのやり方をご紹介ください。
ChatGPT:
いいテーマを選ばれましたね!✨
Qiita記事 json to csv でも紹介されているように、JSONファイル → CSVファイル 変換はよく使う処理です。
用途(ちょっとしたデータ確認か、大規模データ処理か)や環境(コマンドライン、Python、Excel など)によってやり方を選ぶと効率的です。
🔹 おすすめの変換方法
- Python(pandas を使う方法:簡単&強力)
Python が使える環境ならこれが一番おすすめです。
import pandas as pd
JSONを読み込む
df = pd.read_json("input.json")
CSVに書き出す
df.to_csv("output.csv", index=False, encoding="utf-8")
JSONが入れ子構造になっている場合は、pd.json_normalize() を使うとフラット化してCSVにできます。
import pandas as pd
import json
with open("input.json", "r", encoding="utf-8") as f:
data = json.load(f)
df = pd.json_normalize(data)
df.to_csv("output.csv", index=False, encoding="utf-8")
📌 メリット: 日本語文字化けも防ぎやすく、表形式で処理可能。データ量が多くても高速。
- コマンドライン(jq + csvkit)
Linux/Mac の CLI でサクッと変換したい場合に便利です。
cat input.json | jq -r '.[] | [.key1, .key2, .key3] | @csv' > output.csv
jq でJSONを整形
csvkit を使うとさらにExcel互換性のあるCSVに加工できます
📌 メリット: スクリプトや自動化に組み込みやすい- オンラインツール
GUIで変換したいだけなら「JSON to CSV converter」系のサイトも便利です。
例: Konklone.io JSON to CSV
📌 メリット: コード不要。お試しに最適。
📌 デメリット: センシティブデータや大規模ファイルには不向き- Excel / Googleスプレッドシート
JSON → CSV 変換をオンラインでしてから Excel で開く
または Power Query で直接 JSON を読み込んで表形式に変換
📌 メリット: 非エンジニアの方や可視化目的には便利
✅ まとめ
プログラミング可能なら → Python + pandas が一番万能
コマンドラインで軽量にやりたいなら → jq + csvkit
とりあえず手軽に試したいなら → Web変換ツール
表計算ソフトで扱いたいなら → Excel/Google Sheets
👉 ご質問ですが、変換したい JSON は ネストが深い複雑な構造 ですか?
それとも シンプルな配列(オブジェクトのリスト) ですか?
最適なやり方が変わるので、差し支えなければ教えていただけますか。
シンプルな配列です。
ChatGPT:
なるほど!シンプルな配列(例えばこんな形👇)なら、とても簡単に変換できます。
[
{"id": 1, "name": "Alice", "age": 23},
{"id": 2, "name": "Bob", "age": 31},
{"id": 3, "name": "Charlie", "age": 28}
]
🔹 Python + pandas の方法(おすすめ)
一番わかりやすくて、再利用もしやすいです。
import pandas as pd
JSONを読み込む
df = pd.read_json("input.json")
CSVに書き出す
df.to_csv("output.csv", index=False, encoding="utf-8")
👉 上記の JSON を処理すると、output.csv はこんな感じになります:
id,name,age
1,Alice,23
2,Bob,31
3,Charlie,28
🔹 Python + 標準ライブラリだけでやる方法
外部ライブラリを入れたくない場合はこちら。
import json
import csv
JSON読み込み
with open("input.json", "r", encoding="utf-8") as f:
data = json.load(f)
CSV書き出し
with open("output.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
🔹 コマンドラインで一発(jq)
もしLinux/Macの環境なら、こんな感じで CSV にできます。
jq -r '(.[0] | keys_unsorted) as $keys |
$keys, map([.[ $keys[] ]])[] | @csv' input.json > output.csv
✅ シンプルな配列なら、Pythonの2行(pandas) が一番スッキリでおすすめです。
ご質問ですが、この変換は 一度きりのお試し用途 ですか?
それとも 今後も繰り返し使うバッチ処理 に組み込みたいですか?
繰り返し使うバッチ処理に組み込みたいです。
ChatGPT:
なるほど!👍
繰り返し使うバッチ処理に組み込みたいなら、自動化しやすい・メンテしやすい 方法を選ぶのが大事です。
🔹 おすすめの実装方針
- Pythonスクリプト化して定期実行
最もシンプルで拡張性があります。
#!/usr/bin/env python3
import pandas as pd
import sys
import os
def json_to_csv(input_file, output_file):
df = pd.read_json(input_file)
df.to_csv(output_file, index=False, encoding="utf-8")
if name == "main":
# コマンドライン引数からファイル指定
if len(sys.argv) < 3:
print("Usage: python json_to_csv.py input.json output.csv")
sys.exit(1)
input_file = sys.argv[1]
output_file = sys.argv[2]
if not os.path.exists(input_file):
print(f"Error: {input_file} not found.")
sys.exit(1)
json_to_csv(input_file, output_file)
print(f"Converted {input_file} → {output_file}")
✅ これを json_to_csv.py として保存し、以下のように呼び出せます:
python json_to_csv.py data.json data.csv
👉 cron や Windows タスクスケジューラに登録すれば、定期実行できます。- 標準ライブラリ版(依存ゼロ)
もしサーバーなどに pandas を入れたくない場合は、標準ライブラリだけで書けます。
#!/usr/bin/env python3
import json
import csv
import sys
def json_to_csv(input_file, output_file):
with open(input_file, "r", encoding="utf-8") as f:
data = json.load(f)
with open(output_file, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
if name == "main":
if len(sys.argv) < 3:
print("Usage: python json_to_csv.py input.json output.csv")
sys.exit(1)
json_to_csv(sys.argv[1], sys.argv[2])
print(f"Converted {sys.argv[1]} → {sys.argv[2]}")- シェルスクリプト(Linux/Mac向け)
jq が使える環境なら、簡単なバッチ処理にできます。
#!/bin/bash
input=$1
output=$2
jq -r '(.[0] | keys_unsorted) as $keys |
$keys, map([.[ $keys[] ]])[] | @csv' "$input" > "$output"
echo "Converted $input → $output"
実行例:
./json_to_csv.sh data.json data.csv
🔹 まとめ
環境がPython OK → pandas 版がおすすめ(堅牢&拡張しやすい)
依存を減らしたい → 標準ライブラリ版
Linuxで軽量に → jq シェルスクリプト
👉 ここで確認したいのですが、ユーザーさんのバッチ処理は Windows環境 ですか?
それとも Linux/UNIX系サーバー で回す感じでしょうか?
docker上のLinuxを想定しています。
ChatGPT:
なるほど!Docker 上の Linux でバッチ処理するなら、かなり自由度がありますね 👍
環境をまるごとコンテナ化できるので、再現性と移植性を意識して組むのがおすすめです。
🔹 実装アプローチ
✅ 1. Python + pandas を Docker に組み込み
Python スクリプトを用意して、Dockerfile に pandas をインストールしておけば安定です。
json_to_csv.py
#!/usr/bin/env python3
import pandas as pd
import sys
def json_to_csv(input_file, output_file):
df = pd.read_json(input_file)
df.to_csv(output_file, index=False, encoding="utf-8")
if name == "main":
if len(sys.argv) < 3:
print("Usage: python json_to_csv.py input.json output.csv")
sys.exit(1)
json_to_csv(sys.argv[1], sys.argv[2])
print(f"Converted {sys.argv[1]} → {sys.argv[2]}")
Dockerfile
FROM python:3.11-slim
必要なライブラリをインストール
RUN pip install pandas
スクリプトをコピー
WORKDIR /app
COPY json_to_csv.py .
エントリーポイント
ENTRYPOINT ["python", "json_to_csv.py"]
ビルドと実行例:
docker build -t json2csv .
docker run --rm -v $(pwd):/data json2csv /data/input.json /data/output.csv
👉 -v $(pwd):/data でホストの JSON/CSV をコンテナにマウントできるので便利。
✅ 2. 標準ライブラリだけで変換(軽量コンテナ向け)
pandas を入れたくないなら、標準ライブラリ版を使うとコンテナが軽量になります。
依存ゼロなので、python:3.11-alpine など極小イメージでもOK。
✅ 3. jq を使うシェルスクリプト
軽量ツール志向なら jq を使ったシェルスクリプトをコンテナに組み込む手もあります。
json_to_csv.sh
#!/bin/sh
input=$1
output=$2
jq -r '(.[0] | keys_unsorted) as $keys |
$keys, map([.[ $keys[] ]])[] | @csv' "$input" > "$output"
echo "Converted $input → $output"
Dockerfile
FROM alpine:3.19
RUN apk add --no-cache jq
WORKDIR /data
COPY json_to_csv.sh /usr/local/bin/json_to_csv
RUN chmod +x /usr/local/bin/json_to_csv
ENTRYPOINT ["json_to_csv"]
実行例:
docker build -t json2csv-jq .
docker run --rm -v $(pwd):/data json2csv-jq /data/input.json /data/output.csv
🔹 まとめ
柔軟性・複雑な JSON 対応 → Python + pandas
軽量・依存最小化 → Python 標準ライブラリ版
とにかく軽量・CLI派 → jq シェルスクリプト
👉 ちなみに、そのバッチ処理は 「複数の JSON ファイルをまとめて CSV にする」 ようなケースですか?
それとも 1対1で JSON → CSV 変換を繰り返す感じですか?
どちらも想定しています。
ChatGPT:
なるほど 👍
「1対1変換」と「複数 JSON をまとめて CSV 化」どちらも対応したいなら、スクリプトを少し拡張しておくと便利です。
🔹 Python 版(pandas 使用)
スクリプト例
#!/usr/bin/env python3
import pandas as pd
import sys
import os
import glob
def json_to_csv(input_file, output_file):
df = pd.read_json(input_file)
df.to_csv(output_file, index=False, encoding="utf-8")
if name == "main":
if len(sys.argv) < 2:
print("Usage:")
print(" python json_to_csv.py input.json [output.csv]")
print(" python json_to_csv.py /path/to/json_dir/")
sys.exit(1)
target = sys.argv[1]
# JSON → CSV(単体)
if os.path.isfile(target) and target.endswith(".json"):
output_file = sys.argv[2] if len(sys.argv) > 2 else target.replace(".json", ".csv")
json_to_csv(target, output_file)
print(f"Converted {target} → {output_file}")
# ディレクトリの場合はまとめて変換
elif os.path.isdir(target):
files = glob.glob(os.path.join(target, "*.json"))
if not files:
print("No JSON files found.")
sys.exit(1)
for f in files:
out = f.replace(".json", ".csv")
json_to_csv(f, out)
print(f"Converted {f} → {out}")
else:
print("Error: Please specify a .json file or a directory containing .json files")
sys.exit(1)
実行例
1対1変換
python json_to_csv.py data.json data.csv
ディレクトリ内の全ての .json を変換
python json_to_csv.py ./json_dir/
🔹 jq シェルスクリプト版(軽量)
json_to_csv.sh
#!/bin/sh
target=$1
単一ファイル
if [ -f "$target" ]; then
out="${target%.json}.csv"
jq -r '(.[0] | keys_unsorted) as $keys |
$keys, map([.[ $keys[] ]])[] | @csv' "$target" > "$out"
echo "Converted $target → $out"
ディレクトリの場合
elif [ -d "$target" ]; then
for f in "$target"/*.json; do
out="${f%.json}.csv"
jq -r '(.[0] | keys_unsorted) as $keys |
$keys, map([.[ $keys[] ]])[] | @csv' "$f" > "$out"
echo "Converted $f → $out"
done
else
echo "Usage: json_to_csv.sh file.json | directory"
fi
🔹 まとめ
1対1変換 & 複数ファイル処理 → どちらも上記スクリプトでカバー可能
Python版 → ネスト構造対応や加工もしたいときに便利
jq版 → 超軽量。JSON がシンプルな配列なら十分
👉 ご質問ですが、複数 JSON をまとめるときは
「ファイルごとに CSV 出力(data1.json → data1.csv)」
「すべての JSON を 1つの CSV に結合」
どちらの形を想定されていますか?
すべての JSON を 1つの CSV に結合 です。
ChatGPT:
なるほど!😃
複数の JSON を ひとつの CSV にまとめたい んですね。
これなら「縦にどんどん追記していく」イメージで処理するときれいにまとまります。
🔹 Python(pandas版:一番柔軟)
#!/usr/bin/env python3
import pandas as pd
import glob
import sys
import os
def merge_json_to_csv(input_dir, output_file):
all_files = glob.glob(os.path.join(input_dir, ".json"))
if not all_files:
print("No JSON files found.")
sys.exit(1)
dfs = []
for f in all_files:
df = pd.read_json(f)
dfs.append(df)
merged = pd.concat(dfs, ignore_index=True)
merged.to_csv(output_file, index=False, encoding="utf-8")
print(f"Merged {len(all_files)} files → {output_file}")
if name == "main":
if len(sys.argv) < 3:
print("Usage: python merge_json_to_csv.py /path/to/json_dir output.csv")
sys.exit(1)
merge_json_to_csv(sys.argv[1], sys.argv[2])
実行例
python merge_json_to_csv.py ./json_dir merged.csv
👉 json_dir/ 内のすべての .json を結合して merged.csv を作成します。
🔹 Python(標準ライブラリのみ)
#!/usr/bin/env python3
import json, csv, glob, os, sys
def merge_json_to_csv(input_dir, output_file):
files = glob.glob(os.path.join(input_dir, ".json"))
if not files:
print("No JSON files found.")
sys.exit(1)
with open(files[0], "r", encoding="utf-8") as f:
first_data = json.load(f)
fieldnames = first_data[0].keys()
with open(output_file, "w", newline="", encoding="utf-8") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
# 最初のファイルから書き込み
writer.writerows(first_data)
# 残りのファイルも追記
for f in files[1:]:
with open(f, "r", encoding="utf-8") as jf:
data = json.load(jf)
writer.writerows(data)
print(f"Merged {len(files)} files → {output_file}")
if name == "main":
if len(sys.argv) < 3:
print("Usage: python merge_json_to_csv.py /path/to/json_dir output.csv")
sys.exit(1)
merge_json_to_csv(sys.argv[1], sys.argv[2])
🔹 jq版(軽量)
jq -s '[.[][]] | (.[0] | keys_unsorted) as $keys |
$keys, map([.[ $keys[] ]])[] | @csv' json_dir/.json > merged.csv
📌 ポイント
-s は複数ファイルを配列として読み込むオプション
.[][] で配列をフラット化してひとつにまとめる
✅ まとめ
pandas版 → 複雑なJSONでも処理できて便利(おすすめ)
標準ライブラリ版 → 依存ゼロで軽量
jq版 → Linux環境ならワンライナーで高速
👉 確認ですが、この「結合」は
単なる連結(行をまとめるだけ)
それとも キーごとにマージ(例: idでjoinして1レコードに統合)
どちらのイメージに近いでしょうか?