使用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
相关产品推荐
相关产品推荐

