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

在Google Apps Script中从解析后的JSON对象检索指定元素

解决Google Apps Script Webhook无法提取指定JSON字段的问题

问题描述

我有一个绑定到谷歌表格并发布为Web应用的Google Apps Script,它作为Webhook收集数据。目前脚本可将时间戳存入第1列、完整数据包存入第3列,但无法从解析后的JSON对象中检索指定元素。

解析后的对象结构(Logger输出格式)如下:

{processing={acquirer_reference_number=24022122407531018095, acquirer_transaction_id=57631018089}, id=pay_n4m745lnx7uy2tmgx4z26mksi, action_id=act_qqno6t6jctdkzbuk2fu3js71e, response_summary=Approved, metadata={is_supplementary=True, ps_id=9, token=tok_war7hee5nole7d21bknt45dm, transaction=7125, hash=84c478fdfbdb2515d46542adbd6ggd516dc0048fd67, order_id=83245142, sandbox=0}, amount=271.0, processed_on=2022-09-21T13:35:32Z, response_code=10000, currency=USD, reference=2694931}

需要检索以下三个元素并分别存入表格第4、5、6列(元素顺序随机,无法依赖索引):

  • amount(值:271.0)
  • reference(值:2694931)
  • is_supplementary(值:True)

尝试过点表示法和方括号表示法均无效,寻求解决方法。

解决方案

1. 确保正确解析Webhook请求体

首先要确认你是正确接收并解析了Webhook的JSON数据。如果Webhook发送的是标准JSON格式,需要先获取请求体并解析为JavaScript对象:

function doPost(e) {
  // 解析请求体为JSON对象
  const payload = JSON.parse(e.postData.contents);
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // 获取当前时间戳
  const timestamp = new Date();
  
  // 提取目标字段
  const amount = payload.amount;
  const reference = payload.reference;
  const isSupplementary = payload.metadata.is_supplementary;
  
  // 准备要写入的行数据
  const rowData = [
    timestamp,          // 第1列:时间戳
    '',                 // 第2列:留空(根据你的需求调整)
    JSON.stringify(payload), // 第3列:完整数据包(转为字符串存储)
    amount,             // 第4列:amount
    reference,          // 第5列:reference
    isSupplementary     // 第6列:is_supplementary
  ];
  
  // 将数据追加到表格末尾
  sheet.appendRow(rowData);
  
  // 返回Webhook响应(根据需求调整)
  return ContentService.createTextOutput(JSON.stringify({status: 'success'})).setMimeType(ContentService.MimeType.JSON);
}

2. 排查常见问题

  • 请求体格式问题:如果Webhook发送的不是application/json格式,e.postData.contents可能不是标准JSON字符串。可以先打印e.postData.type确认格式,若为application/x-www-form-urlencoded,则需要用e.parameter获取参数。
  • 字段不存在的容错处理:如果某些字段可能缺失,建议添加判断避免脚本报错:
    const amount = payload.amount || 'N/A';
    const reference = payload.reference || 'N/A';
    const isSupplementary = payload.metadata?.is_supplementary || false; // 使用可选链操作符处理metadata可能不存在的情况
    
  • Logger输出的格式误导:你提供的是Google Apps Script Logger输出的对象格式,并非标准JSON。实际解析后的对象可以直接通过点表示法访问嵌套字段,比如payload.metadata.is_supplementary是完全有效的。

3. 验证字段访问

可以在脚本中添加日志验证字段是否正确提取:

Logger.log('Amount: ' + amount);
Logger.log('Reference: ' + reference);
Logger.log('Is Supplementary: ' + isSupplementary);

执行后查看日志确认字段值是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:55:22