← ブログに戻る

JSONをExcelに変換する方法

オンラインツール、Python、JavaScript、専用ソフトウェアを使用してJSONをExcel(XLSX/CSV)に変換する方法。

Big JSON Team11 分で読めますconversion
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

11 分読む

# JSONをExcelに変換する方法

JSONデータをExcelスプレッドシートに変換する様々な方法を学びます。

なぜJSONをExcelに変換するのか

使用例

  • 📊 データ分析 - Excelでデータを分析
  • 📈 レポート作成 - ビジネスレポート
  • 👥 非技術者との共有 - 読みやすい形式
  • 📉 可視化 - グラフとチャート作成
  • 💾 データバックアップ - 読みやすいバックアップ

オンラインツール

1. BigJSON.online

URL: bigjson.online 特徴:
  • JSONをExcel/CSVに変換
  • 無料で高速
  • 大きなファイル対応
  • データプライバシー保護

手順:
  • JSONを貼り付け
  • 「Excelにエクスポート」をクリック
  • .xlsxファイルをダウンロード
  • 2. ConvertJSON

    特徴:
    • シンプルな変換
    • カスタマイズ可能
    • CSV/XLSX出力

    3. JSON to Excel Converter

    特徴:
    • 一括変換
    • フォーマット保持
    • 無料

    JavaScript/Node.jsでの変換

    xlsx パッケージ

    インストール

    npm install xlsx

    基本的な変換

    const XLSX = require('xlsx');
    

    const fs = require('fs');

    // JSONデータ

    const data = [

    { name: '田中太郎', age: 30, city: '東京' },

    { name: '佐藤花子', age: 25, city: '大阪' },

    { name: '鈴木一郎', age: 35, city: '名古屋' }

    ];

    // ワークシートを作成

    const worksheet = XLSX.utils.json_to_sheet(data);

    // ワークブックを作成

    const workbook = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(workbook, worksheet, 'Users');

    // Excelファイルに書き込み

    XLSX.writeFile(workbook, 'users.xlsx');

    console.log('Excelファイルが作成されました!');

    JSONファイルから

    const XLSX = require('xlsx');
    

    const fs = require('fs');

    // JSONファイルを読み取り

    const jsonData = JSON.parse(fs.readFileSync('data.json', 'utf8'));

    // Excelに変換

    const worksheet = XLSX.utils.json_to_sheet(jsonData);

    const workbook = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(workbook, worksheet, 'Data');

    XLSX.writeFile(workbook, 'output.xlsx');

    複数シート

    const XLSX = require('xlsx');
    
    

    const workbook = XLSX.utils.book_new();

    // シート1:ユーザー

    const users = [

    { id: 1, name: '田中太郎' },

    { id: 2, name: '佐藤花子' }

    ];

    const usersSheet = XLSX.utils.json_to_sheet(users);

    XLSX.utils.book_append_sheet(workbook, usersSheet, 'Users');

    // シート2:注文

    const orders = [

    { orderId: 1001, userId: 1, total: 5000 },

    { orderId: 1002, userId: 2, total: 3000 }

    ];

    const ordersSheet = XLSX.utils.json_to_sheet(orders);

    XLSX.utils.book_append_sheet(workbook, ordersSheet, 'Orders');

    XLSX.writeFile(workbook, 'data.xlsx');

    カスタムヘッダー

    const data = [
    

    { name: '田中太郎', age: 30 },

    { name: '佐藤花子', age: 25 }

    ];

    // カスタムヘッダー

    const worksheet = XLSX.utils.json_to_sheet(data, {

    header: ['name', 'age'],

    skipHeader: false

    });

    // ヘッダーを日本語に変更

    worksheet['A1'].v = '名前';

    worksheet['B1'].v = '年齢';

    const workbook = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(workbook, worksheet, 'Data');

    XLSX.writeFile(workbook, 'custom.xlsx');

    ExcelJS(高度な機能)

    インストール

    npm install exceljs

    スタイル付き変換

    const ExcelJS = require('exceljs');
    
    

    async function jsonToExcel() {

    const workbook = new ExcelJS.Workbook();

    const worksheet = workbook.addWorksheet('Users');

    // カラム定義

    worksheet.columns = [

    { header: '名前', key: 'name', width: 20 },

    { header: '年齢', key: 'age', width: 10 },

    { header: '都市', key: 'city', width: 15 }

    ];

    // ヘッダースタイル

    worksheet.getRow(1).font = { bold: true };

    worksheet.getRow(1).fill = {

    type: 'pattern',

    pattern: 'solid',

    fgColor: { argb: 'FFE0E0E0' }

    };

    // データ追加

    const data = [

    { name: '田中太郎', age: 30, city: '東京' },

    { name: '佐藤花子', age: 25, city: '大阪' }

    ];

    worksheet.addRows(data);

    // ファイルに保存

    await workbook.xlsx.writeFile('styled.xlsx');

    console.log('スタイル付きExcelが作成されました!');

    }

    jsonToExcel();

    条件付き書式

    // 年齢に基づいて色を変更
    

    worksheet.eachRow((row, rowNumber) => {

    if (rowNumber > 1) { // ヘッダーをスキップ

    const age = row.getCell(2).value;

    if (age > 30) {

    row.getCell(2).fill = {

    type: 'pattern',

    pattern: 'solid',

    fgColor: { argb: 'FFFF0000' } // 赤

    };

    }

    }

    });

    Pythonでの変換

    pandas ライブラリ

    インストール

    pip install pandas openpyxl

    基本的な変換

    import pandas as pd
    

    import json

    # JSONを読み取り

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

    data = json.load(f)

    # DataFrameに変換

    df = pd.DataFrame(data)

    # Excelに書き込み

    df.to_excel('output.xlsx', index=False, engine='openpyxl')

    print('Excelファイルが作成されました!')

    複数シート

    import pandas as pd
    
    

    # 複数のDataFrame

    users = pd.DataFrame([

    {'name': '田中太郎', 'age': 30},

    {'name': '佐藤花子', 'age': 25}

    ])

    orders = pd.DataFrame([

    {'order_id': 1001, 'total': 5000},

    {'order_id': 1002, 'total': 3000}

    ])

    # ExcelWriterで複数シート

    with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:

    users.to_excel(writer, sheet_name='Users', index=False)

    orders.to_excel(writer, sheet_name='Orders', index=False)

    print('複数シートのExcelが作成されました!')

    ネストされたJSONの処理

    import pandas as pd
    

    import json

    # ネストされたJSON

    json_data = '''

    {

    "users": [

    {

    "name": "田中太郎",

    "age": 30,

    "address": {

    "city": "東京",

    "zip": "100-0001"

    }

    },

    {

    "name": "佐藤花子",

    "age": 25,

    "address": {

    "city": "大阪",

    "zip": "530-0001"

    }

    }

    ]

    }

    '''

    data = json.loads(json_data)

    # json_normalizeでフラット化

    df = pd.json_normalize(data['users'])

    # Excelに書き込み

    df.to_excel('flattened.xlsx', index=False)

    print(df)

    # name age address.city address.zip

    # 0 田中太郎 30 東京 100-0001

    # 1 佐藤花子 25 大阪 530-0001

    スタイル付き

    import pandas as pd
    
    

    df = pd.DataFrame([

    {'name': '田中太郎', 'age': 30, 'score': 85},

    {'name': '佐藤花子', 'age': 25, 'score': 92}

    ])

    # スタイル関数

    def highlight_high_scores(val):

    color = 'yellow' if val > 90 else ''

    return f'background-color: {color}'

    # スタイルを適用してExcelに

    with pd.ExcelWriter('styled.xlsx', engine='openpyxl') as writer:

    df.to_excel(writer, sheet_name='Data', index=False)

    workbook = writer.book

    worksheet = writer.sheets['Data']

    # ヘッダーをボールドに

    for cell in worksheet[1]:

    cell.font = cell.font.copy(bold=True)

    print('スタイル付きExcelが作成されました!')

    CSVへの変換

    JavaScriptでJSON to CSV

    function jsonToCsv(jsonData) {
    

    if (jsonData.length === 0) return '';

    // ヘッダー

    const headers = Object.keys(jsonData[0]);

    const csvHeaders = headers.join(',');

    // 行

    const csvRows = jsonData.map(row => {

    return headers.map(header => {

    const value = row[header];

    // 値をエスケープ

    const escaped = String(value).replace(/"/g, '""');

    return "${escaped}";

    }).join(',');

    });

    return [csvHeaders, ...csvRows].join('\n');

    }

    // 使用

    const data = [

    { name: '田中太郎', age: 30, city: '東京' },

    { name: '佐藤花子', age: 25, city: '大阪' }

    ];

    const csv = jsonToCsv(data);

    console.log(csv);

    // ファイルに保存

    const fs = require('fs');

    fs.writeFileSync('output.csv', csv, 'utf8');

    PythonでJSON to CSV

    import pandas as pd
    

    import json

    # JSONを読み取り

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

    data = json.load(f)

    # DataFrameに変換

    df = pd.DataFrame(data)

    # CSVに書き込み

    df.to_csv('output.csv', index=False, encoding='utf-8-sig')

    print('CSVファイルが作成されました!')

    複雑なJSON構造の処理

    ネストされた配列

    const data = [
    

    {

    name: '田中太郎',

    hobbies: ['読書', '旅行', '料理']

    },

    {

    name: '佐藤花子',

    hobbies: ['音楽', 'スポーツ']

    }

    ];

    // 配列を文字列に変換

    const flattened = data.map(person => ({

    name: person.name,

    hobbies: person.hobbies.join(', ')

    }));

    // Excelに変換

    const XLSX = require('xlsx');

    const worksheet = XLSX.utils.json_to_sheet(flattened);

    const workbook = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(workbook, worksheet, 'Data');

    XLSX.writeFile(workbook, 'hobbies.xlsx');

    ネストされたオブジェクト

    import pandas as pd
    
    

    data = [

    {

    "name": "田中太郎",

    "address": {

    "city": "東京",

    "zip": "100-0001"

    }

    }

    ]

    # フラット化

    df = pd.json_normalize(data)

    # Excelに

    df.to_excel('nested.xlsx', index=False)

    コマンドラインツール

    jq と csvkit

    # JSONをCSVに変換
    

    jq -r '.[] | [.name, .age, .city] | @csv' data.json > output.csv

    # または csvkit を使用

    pip install csvkit

    in2csv data.json > output.csv

    Miller (mlr)

    # インストール
    

    brew install miller

    # 変換

    mlr --j2c cat data.json > output.csv

    ベストプラクティス

    1. データ検証

    function validateData(data) {
    

    if (!Array.isArray(data)) {

    throw new Error('データは配列である必要があります');

    }

    if (data.length === 0) {

    throw new Error('データが空です');

    }

    // すべての行が同じキーを持つか確認

    const firstKeys = Object.keys(data[0]);

    const allSame = data.every(row => {

    return JSON.stringify(Object.keys(row).sort()) ===

    JSON.stringify(firstKeys.sort());

    });

    if (!allSame) {

    console.warn('警告:行によってキーが異なります');

    }

    }

    2. 大きなファイルの処理

    import pandas as pd
    

    import json

    def convert_large_json(input_file, output_file, chunk_size=1000):

    """大きなJSONファイルをチャンクで処理"""

    with open(input_file, 'r', encoding='utf-8') as f:

    data = json.load(f)

    # チャンクで処理

    with pd.ExcelWriter(output_file, engine='openpyxl') as writer:

    for i in range(0, len(data), chunk_size):

    chunk = data[i:i + chunk_size]

    df = pd.DataFrame(chunk)

    if i == 0:

    df.to_excel(writer, index=False, sheet_name='Data')

    else:

    df.to_excel(writer, index=False, sheet_name='Data',

    startrow=i+1, header=False)

    convert_large_json('large.json', 'large.xlsx')

    3. エラーハンドリング

    async function safeJsonToExcel(jsonData, outputFile) {
    

    try {

    // データ検証

    if (!Array.isArray(jsonData) || jsonData.length === 0) {

    throw new Error('無効なJSONデータ');

    }

    // 変換

    const XLSX = require('xlsx');

    const worksheet = XLSX.utils.json_to_sheet(jsonData);

    const workbook = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(workbook, worksheet, 'Data');

    // 書き込み

    XLSX.writeFile(workbook, outputFile);

    console.log(✅ 成功: ${outputFile});

    return true;

    } catch (error) {

    console.error('❌ エラー:', error.message);

    return false;

    }

    }

    比較表

    | 方法 | 簡単さ | 機能 | 速度 | コスト |

    |------|-------|------|------|--------|

    | オンラインツール | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | 無料 |

    | xlsx (JS) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 無料 |

    | ExcelJS | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 無料 |

    | pandas (Python) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 無料 |

    | 手動 | ⭐ | ⭐ | ⭐ | 無料 |

    まとめ

    クイック選択ガイド

    • 単発変換 → オンラインツール(BigJSON)
    • Node.jsプロジェクト → xlsx パッケージ
    • 高度なスタイル → ExcelJS
    • Pythonプロジェクト → pandas
    • シンプルなCSV → 組み込みツール

    推奨ワークフロー

    // 1. データ検証
    

    validateData(jsonData);

    // 2. 変換

    const XLSX = require('xlsx');

    const ws = XLSX.utils.json_to_sheet(jsonData);

    const wb = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(wb, ws, 'Data');

    // 3. 保存

    XLSX.writeFile(wb, 'output.xlsx');

    // 4. 確認

    console.log('✅ Excelファイルが作成されました');

    JSONからExcelへの変換で、データ共有を簡単に!

    Share:

    関連記事

    Read in English