JSONからCSVへの変換ツール

JSON配列をCSV形式に変換

ローカルで実行 · シークレットの貼り付けも安全
CSVがここに表示されます…

JSONからCSVへの変換とは?

JSONからCSVへの変換は、JSON形式の構造化データをコンマ区切り値(表形式)に変換する処理です。スプレッドシート・データベース・分析ツールはCSVをネイティブに扱えます。JSONはネストされたオブジェクトと配列として固定スキーマなしにデータを保存します。CSVはヘッダー行でフィールド名を定義し、行と列としてデータを保存します。この変換によってAPIデータをスプレッドシートやデータベースに届けることができます。

CSV(Comma-Separated Values)はRFC 4180で定義されています。各行が1レコードを表し、行内のフィールドは区切り文字(最も一般的にはカンマ)で区切られます。区切り文字・ダブルクォート・改行を含むフィールドはダブルクォートで囲み、内部のクォートはダブルクォートを重ねてエスケープします。このエスケープ処理が、JSONからCSVへのコンバーターを手書きする際にバグが最も発生しやすい箇所です。

入力が一貫したキーを持つフラットなオブジェクトの配列であれば、変換は単純です。各オブジェクトが1行になり、各ユニークなキーが列ヘッダーになります。ネストされたオブジェクトや配列はフラット化が必要であり、オブジェクト間でキーが不一致の場合は欠損フィールドの扱い方(通常はセルを空にする)が必要です。信頼性の高いコンバーターはこれらのエッジケースをすべて自動的に処理します。

なぜJSONをCSVに変換するのか?

APIはJSONを返しますが、スプレッドシート・SQLデータベース・BIツールは表形式データを必要とします。JSONをCSVに変換することで、カスタムのインポートスクリプトを書くことなくシステム間でデータを移動できます。

ブラウザで即時変換
JSONを貼り付けてファイルをすぐにダウンロードできます。サーバーへのアップロード不要、外部APIのファイルサイズ制限なし、処理キューの待機なし。
🔒
プライバシー優先の処理
データはブラウザ内に留まります。変換はデバイス上のJavaScriptで完全に実行されます。データベースエクスポート・ユーザーレコード・財務データがマシンの外に出ることはありません。
🔀
複数の区切り文字に対応
カンマ・セミコロン・タブ・パイプから区切り文字を選択できます。欧州ロケールのスプレッドシートにはセミコロン、TSVファイルにはタブ、レガシーシステムへのインポートにはパイプを使用してください。
📋
アカウント不要
ページを開いてすぐに変換できます。サインアップ・APIキー・CLIのインストールは不要です。モダンブラウザがあればどのデバイスでも動作します。

JSONからCSVへの変換ユースケース

スプレッドシートへのAPIデータエクスポート
REST APIはJSONを返します。プロダクトマネージャーやアナリストはそのデータをExcelやGoogle Sheetsで必要とします。APIレスポンスをCSVに変換し、任意のスプレッドシートアプリで直接開けます。
データベースへの一括インポート
PostgreSQLのCOPY、MySQLのLOAD DATA、SQLiteの.importはいずれもCSVを受け付けます。カスタムインポートスクリプトを書かずに、データセットを表形式に変換して高速一括ロードできます。
ETLパイプラインのプロトタイピング
ETLパイプラインの中間出力は生のJSONのままでは確認が困難なことがあります。ステップの出力をCSVに変換してスプレッドシートで開き、パイプライン全体を組み上げる前に変換処理を検証できます。
QAテストデータの準備
QAエンジニアはテストフィクスチャをJSONで生成しますが、多くのテストフレームワークやデータ駆動テストツールはパラメータ化テストの入力にCSVを受け付けます。手動で再フォーマットせずにフィクスチャをCSVに変換できます。
ログ分析とレポーティング
アプリケーションやクラウドサービスの構造化JSONログをCSVに変換し、Tableau・Power BI・LookerなどのBIツールにインポートして可視化とレポーティングに活用できます。
学術データの処理
オープンデータAPIを扱う学生や研究者はJSONレスポンスを受け取ります。CSVに変換することで、パースコードを書かずにR・pandas・SPSS・Excelで分析できます。

CSV区切り文字リファレンス

区切り文字は各行のフィールドを区切る文字です。カンマが最も一般的ですが、特定の用途では他の区切り文字が標準です。誤った区切り文字を選ぶと、ファイルを開いたときにフィールドが結合されたり分割されたりします。

区切り文字文字拡張子使用場面
Comma,.csvDefault for most spreadsheets and databases
Semicolon;.csvStandard in locales where comma is a decimal separator (DE, FR, BR)
Tab\t.tsvAvoids escaping when field values contain commas or semicolons
Pipe|.csvUsed in fixed-width legacy systems and some ETL pipelines

CSVにおけるネストされたJSONの扱い

CSVはフラットな形式であり、ネストされたオブジェクトや配列をネイティブに表現する方法がありません。JSONにネスト構造が含まれる場合、コンバーターはそれを列にフラット化する必要があります。いくつかの戦略があり、CSVの使用方法によって適切な選択が異なります。

ドット記法によるフラット化
ネストされたキーはドットで結合されます:{"address": {"city": "東京"}} は address.city という列名になり、値は東京になります。これが最も一般的なアプローチで、ネストされたフィールド参照をサポートするツールと相性が良いです。
配列インデックス列
配列は番号付き列に展開されます:{"tags": ["a", "b"]} は tags.0 = a、tags.1 = b になります。すべての値を保持しますが、配列が大きい場合は多くの列が生成されます。
JSON文字列へのフォールバック
複雑なネスト値はCSVセル内のJSON文字列としてシリアライズされます:セルには生のJSONテキストが含まれます。完全な構造は保持されますが、利用側がセルの値をパースする必要があります。
ネストされたフィールドの無視
一部のコンバーターはネストされたオブジェクトと配列を完全に除外し、スカラー値(文字列・数値・真偽値・null)のフィールドのみを保持します。クリーンなCSVが生成されますがデータが失われます。ネストされたフィールドが不要であることが明らかな場合にのみ有用です。

コード例

JSONからCSVへのプログラム変換には、ヘッダーの抽出・フィールドのクォート・区切り文字のエスケープ処理が必要です。ほとんどの言語にはCSV書き込みの組み込みまたは標準ライブラリサポートがあります。

JavaScript (Node.js)
const data = [
  { name: "Alice", age: 30, city: "Berlin" },
  { name: "Bob", age: 25, city: "Tokyo" },
]

// Extract headers from the first object
const headers = Object.keys(data[0])
const csv = [
  headers.join(","),
  ...data.map(row => headers.map(h => {
    const val = String(row[h] ?? "")
    // Quote fields that contain commas, quotes, or newlines
    return val.includes(",") || val.includes('"') || val.includes("\n")
      ? '"' + val.replace(/"/g, '""') + '"'
      : val
  }).join(","))
].join("\n")

console.log(csv)
// → name,age,city
// → Alice,30,Berlin
// → Bob,25,Tokyo
Python
import json, csv, io

json_str = '[{"name":"Alice","age":30,"city":"Berlin"},{"name":"Bob","age":25,"city":"Tokyo"}]'
data = json.loads(json_str)

output = io.StringIO()
writer = csv.DictWriter(output, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)

print(output.getvalue())
# → name,age,city
# → Alice,30,Berlin
# → Bob,25,Tokyo
CLI (jq + Miller)
# Using jq to convert JSON array to CSV
echo '[{"name":"Alice","age":30},{"name":"Bob","age":25}]' | \
  jq -r '(.[0] | keys_unsorted) as $k | $k, (.[] | [.[$k[]]] ) | @csv'
# → "name","age"
# → "Alice",30
# → "Bob",25

# Using Miller (mlr) for streaming conversion
echo '[{"name":"Alice","age":30}]' | mlr --json --ocsv cat
# → name,age
# → Alice,30
Go
package main

import (
    "encoding/csv"
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    jsonStr := `[{"name":"Alice","age":30},{"name":"Bob","age":25}]`
    var data []map[string]interface{}
    json.Unmarshal([]byte(jsonStr), &data)

    w := csv.NewWriter(os.Stdout)
    // Write header
    headers := []string{"name", "age"}
    w.Write(headers)
    // Write rows
    for _, row := range data {
        record := make([]string, len(headers))
        for i, h := range headers {
            record[i] = fmt.Sprintf("%v", row[h])
        }
        w.Write(record)
    }
    w.Flush()
    // → name,age
    // → Alice,30
    // → Bob,25
}

よくある質問

このコンバーターはどのようなJSON構造を想定していますか?
コンバーターはオブジェクトのJSON配列(例:[{"name":"田中太郎"},{"name":"山田花子"}]')を想定しています。配列内の各オブジェクトが出力の1行になり、オブジェクトのキーが列ヘッダーになります。配列に包まれていない単一のJSONオブジェクトは1行のテーブルとして扱われます。
ネストされたオブジェクトと配列はどのように扱われますか?
ネストされた値はドット記法でフラット化されます。例えば、{"address":{"city":"東京"}'} は address.city という列を生成します。配列はインデックス付き列に展開されます(tags.0、tags.1)。データを保持しながら出力をフラットに保ちます。
オブジェクトごとにキーが異なる場合はどうなりますか?
コンバーターは配列内のすべてのオブジェクトにわたってユニークなキーをすべて収集し、列ヘッダーとして使用します。キーが存在しないオブジェクトはその列に空のセルを持ちます。データは失われず、列の順序はキーが最初に現れた順序に従います。
カンマの代わりにセミコロンやタブを使用できますか?
はい。このツールはカンマ・セミコロン・タブ・パイプの区切り文字をサポートしています。データやロケールが小数点区切りにカンマを使用する場合(ドイツ・フランス・ブラジルのスプレッドシートで一般的)はセミコロンを使用してください。Unixツールで消費するTSVファイルにはタブを使用してください。
変換はロスレスですか?
一貫したスカラー値を持つフラットなJSON配列に対してはロスレスです。出力ファイルには同じデータが含まれており、元のJSONに変換し直すことができます。ネスト構造に対しては、フラット化によってデータの形状が変わります。インデックス付き列やJSON文字列にシリアライズされた配列値は再構築できますが、元の構造を知っている必要があります。
どのくらい大きなJSONファイルを変換できますか?
このツールはブラウザで動作しデータをメモリ内で処理します。最新のデバイスでは10〜20MBまでのファイルは問題なく変換できます。それより大きなファイルには、データをストリームとして処理するjq・Miller、またはcsvモジュールを使用したPythonスクリプトなどのCLIツールを使用してください。
このツールに機密データを貼り付けても安全ですか?
はい。すべての処理はJavaScriptを使用してブラウザ内で行われます。いかなるサーバーにもデータは送信されません。ブラウザの開発者ツールを開き、変換中にネットワークタブにリクエストが表示されないことを確認することで検証できます。