🔧
概念 #n8n #ユースケース #Codeノード #JavaScript #データ変換 #正規化 #ETL 📚 n8nワークフロー自動化

JavaScriptで複雑なデータ変換処理を実装する

複数のネストされたAPIレスポンスをCodeノードのJavaScriptで正規化・変換・結合する高度なデータ変換パターン。配列操作・オブジェクト変換・日付処理の実例を解説。

ユースケース概要

外部APIから受け取った複雑なネスト構造のJSONを、データベースへの保存に適したフラットな構造に変換する。フィールド名の変換・型変換・配列のflatten・日付のフォーマット統一を一括処理する。

解決する課題: 組み込みノードでは対応できない複雑なデータ変換をCodeノードで柔軟に実装する

使用するn8nノード:

  • HTTP Request(元データ取得)
  • Code(変換処理)
  • PostgreSQL / Airtable(変換後データの保存)

よく使うデータ変換パターン

パターン1: ネスト構造のflatten

// APIレスポンス(ネスト構造)
// {
//   "user": { "id": 1, "profile": { "name": "Alice", "email": "alice@example.com" } },
//   "orders": [{ "id": 100, "total": 5000 }]
// }

return $input.all().map(item => {
  const { user, orders } = item.json;
  return {
    json: {
      userId: user.id,
      userName: user.profile.name,
      userEmail: user.profile.email,
      latestOrderId: orders[0]?.id ?? null,
      latestOrderTotal: orders[0]?.total ?? 0,
    }
  };
});

パターン2: 配列を複数のitemに展開

// 1つのitem(注文)を注文明細の数だけitemに展開する
const result = [];
for (const item of $input.all()) {
  for (const lineItem of item.json.lineItems) {
    result.push({
      json: {
        orderId: item.json.id,
        productId: lineItem.productId,
        quantity: lineItem.quantity,
        price: lineItem.price,
        subtotal: lineItem.quantity * lineItem.price,
      }
    });
  }
}
return result;

パターン3: 日付の統一化

// 複数フォーマットの日付をISO 8601に統一する
return $input.all().map(item => {
  const rawDate = item.json.createdDate; // "2026/04/09" or "April 9, 2026"
  const normalized = new Date(rawDate).toISOString();

  // Luxon(n8n組み込み)を使う場合
  const { DateTime } = require('luxon');
  const formatted = DateTime.fromISO(normalized)
    .setZone('Asia/Tokyo')
    .toFormat('yyyy-MM-dd HH:mm:ss');

  return {
    json: { ...item.json, createdDate: formatted }
  };
});

パターン4: 集計・グループ化

// カテゴリ別に売上を集計する
const items = $input.all().map(i => i.json);
const grouped = items.reduce((acc, item) => {
  const key = item.category;
  if (!acc[key]) acc[key] = { category: key, total: 0, count: 0 };
  acc[key].total += item.amount;
  acc[key].count += 1;
  return acc;
}, {});

return Object.values(grouped).map(g => ({
  json: {
    ...g,
    average: Math.round(g.total / g.count),
  }
}));

パターン5: 前後のノードデータを結合

// ユーザーAPIとオーダーAPIのデータをuserIdでJOINする
const users = $('GetUsers').all().map(i => i.json);
const orders = $('GetOrders').all().map(i => i.json);

const userMap = new Map(users.map(u => [u.id, u]));

return orders.map(order => ({
  json: {
    ...order,
    userName: userMap.get(order.userId)?.name ?? 'Unknown',
    userEmail: userMap.get(order.userId)?.email ?? '',
  }
}));

ポイント・注意事項

  • Codeノードのデフォルトは「Run Once for All Items」(全itemを一度に処理)。単一item処理の場合は「Run Once for Each Item」に切り替える
  • エラーが発生した場合はCodeノード全体が失敗する。try-catchで個別itemのエラーを吸収できる
  • console.log() でデバッグ出力できる。n8nの実行ログ「Output」タブで確認できる

関連機能

  1. 1. 🔄n8n概要 - ワークフロー自動化プラットフォーム
  2. 2. ⚙️n8nワークフローの基本(ノード・コネクション・実行)
  3. 3. n8nトリガーの種類(Webhook・スケジュール・イベント)
  4. 4. 🔀n8nロジック制御(フィルター・条件分岐・ループ・マージ)
  5. 5. 🌐n8n HTTP Request・API連携
  6. 6. 🔗n8n主要インテグレーション(Slack・Gmail・GitHub)
  7. 7. 🛡️n8nエラーハンドリング・デバッグ
  8. 8. 🤖n8n AI・LLMエージェント(Chain・Agent)
  9. 9. 💻n8n Codeノード・カスタム処理
  10. 10. 🏢n8nエンタープライズ機能(ソース管理・シークレット・チーム管理)
  11. 11. 🌤️毎朝SlackにAIで天気・ニュースを通知する
  12. 12. 📊GitHubのPRをGoogleシートに自動記録する
  13. 13. 📧新規ユーザー登録時にWelcomeメールを自動送信する
  14. 14. 💳StripeのWebhookで決済完了を検知して処理する
  15. 15. 📈スケジュールトリガーで週次レポートを自動生成する
  16. 16. 🎫Gmailトリガーでサポートメールを自動Notionチケット化する
  17. 17. 🎯条件分岐でリード属性に応じて担当者を振り分ける
  18. 18. 📨ループ処理でリストを走査し一括メール送信する
  19. 19. 📋複数APIのデータをマージして統合レポートを作成する
  20. 20. 🗄️外部REST APIからデータを取得してDBに保存する
  21. 21. 🔍GraphQL APIでGitHubのIssueを取得・加工する
  22. 22. 🔐Bearer認証付きAPIを呼び出してデータ同期する
  23. 23. SlackとNotionを連携したチームタスク管理フロー
  24. 24. 🤝GmailとHubSpotを連携したCRM自動化フロー
  25. 25. 🚀GitHubデプロイイベントをSlackに通知する
  26. 26. 🚨APIエラー発生時にSlackへアラートを送る
  27. 27. 🔁リトライ付きの堅牢なデータ同期フローを構築する
  28. 28. 📝エラーログをAirtableに自動記録する
  29. 29. 🤖LLMを使ったカスタマーサポート自動応答ボット
  30. 30. 🔎ドキュメントRAG検索システムを構築する
  31. 31. 📬AIでメール内容を自動分類・ルーティングする
  32. 32. 🔧JavaScriptで複雑なデータ変換処理を実装する
  33. 33. 📄npmライブラリを使ったPDF自動生成フロー
  34. 34. ✔️カスタムバリデーションロジックをCodeノードで実装する
  35. 35. 🗂️Gitでワークフローをバージョン管理する
  36. 36. 🌍環境変数で本番・ステージングを切り替える
  37. 37. 👥チームでのワークフロー共同管理フロー
  38. 38. 📋AIで履歴書を自動スクリーニング・スコアリングする
  39. 39. 🧾請求書PDFをOCRで自動データ入力・会計ソフト登録する
  40. 40. 📱ブログ記事→SNS自動投稿パイプラインを構築する
  41. 41. 📦Shopify注文処理を完全自動化する(在庫・配送・顧客通知)
  42. 42. 🔔予約リマインダーを自動送信してノーショーを削減する
  43. 43. 📊経営ダッシュボードを毎朝Slackに自動配信する
  44. 44. 🔭競合情報を自動収集してWeeklyレポートにまとめる
  45. 45. 🎉新入社員オンボーディングを完全自動化する

出典: https://docs.n8n.io/code/