0
1

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 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 など)によってやり方を選ぶと効率的です。
🔹 おすすめの変換方法

  1. 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")
📌 メリット: 日本語文字化けも防ぎやすく、表形式で処理可能。データ量が多くても高速。

  1. コマンドライン(jq + csvkit)
    Linux/Mac の CLI でサクッと変換したい場合に便利です。
    cat input.json | jq -r '.[] | [.key1, .key2, .key3] | @csv' > output.csv
    jq でJSONを整形
    csvkit を使うとさらにExcel互換性のあるCSVに加工できます
    📌 メリット: スクリプトや自動化に組み込みやすい
  2. オンラインツール
    GUIで変換したいだけなら「JSON to CSV converter」系のサイトも便利です。
    例: Konklone.io JSON to CSV
    📌 メリット: コード不要。お試しに最適。
    📌 デメリット: センシティブデータや大規模ファイルには不向き
  3. 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:

なるほど!👍
繰り返し使うバッチ処理に組み込みたいなら、自動化しやすい・メンテしやすい 方法を選ぶのが大事です。
🔹 おすすめの実装方針

  1. 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 タスクスケジューラに登録すれば、定期実行できます。
  2. 標準ライブラリ版(依存ゼロ)
    もしサーバーなどに 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]}")
  3. シェルスクリプト(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レコードに統合)
どちらのイメージに近いでしょうか?

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?