You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apps Script解析嵌套JSON至Google Sheets(WooCommerce Webhook)

解决WooCommerce Webhook嵌套JSON解析到Google Sheets多属性分栏问题

核心思路很简单:先把所有可能出现的属性(比如color、material)都捞出来当表头,然后逐个处理每个商品变体,把ID、SKU和对应属性值对应到表格的列里,最后批量写入Sheet就行。

完整Apps Script代码

function parseWooCommerceWebhookToSheet() {
  // 替换为你的Webhook JSON数据(或者直接从Webhook请求中获取)
  const webhookJson = {
    "product_variations": [
      {
        "id": 123,
        "sku": "VAR-001",
        "attributes": [
          {"name": "color", "value": "red"},
          {"name": "material", "value": "cotton"}
        ]
      },
      {
        "id": 124,
        "sku": "VAR-002",
        "attributes": [
          {"name": "color", "value": "blue"},
          {"name": "size", "value": "L"}
        ]
      }
    ]
  };

  const variations = webhookJson.product_variations;
  if (!variations || variations.length === 0) return;

  // 收集所有唯一的属性名称,加上固定的ID、SKU列当表头
  const attributeKeys = new Set(['ID', 'SKU']);
  variations.forEach(variation => {
    variation.attributes.forEach(attr => attributeKeys.add(attr.name));
  });
  const headers = Array.from(attributeKeys);

  // 构建每个变体的行数据
  const rows = variations.map(variation => {
    const rowData = {};
    // 填充固定字段
    rowData['ID'] = variation.id;
    rowData['SKU'] = variation.sku;
    // 把属性转成键值对
    variation.attributes.forEach(attr => {
      rowData[attr.name] = attr.value;
    });
    // 按表头顺序生成行,没有的属性值留空
    return headers.map(key => rowData[key] || '');
  });

  // 写入到Google Sheets,替换成你的表格ID和工作表名
  const sheet = SpreadsheetApp.openById('YOUR_SPREADSHEET_ID').getSheetByName('YOUR_SHEET_NAME');
  sheet.clear(); // 按需选择是否清空旧数据
  // 写入表头
  sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
  // 写入所有数据行
  sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
}

关键细节说明

  • 动态生成表头:用Set自动去重收集所有属性名,不管你的变体有多少种属性组合,表头都能自动覆盖,不会漏掉任何属性列。
  • 属性映射填充:把每个变体的属性转成键值对对象,再按表头顺序生成行数据,没有对应属性的单元格自动留空,保证表格列对齐。
  • 高效写入:批量写入表头和数据行,比逐行写入效率高很多,适合处理大量变体数据。

适配Webhook实时请求

如果要直接处理WooCommerce的Webhook POST请求,把函数改成doPost就行:

function doPost(e) {
  const webhookJson = JSON.parse(e.postData.contents);
  // 后续逻辑和上面的parseWooCommerceWebhookToSheet函数完全一致
}

内容的提问来源于stack exchange,提问作者Jairo Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:54:23