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

Google Sheet App Script如何将SheetA列A的JSON解析后写入SheetB

工作表声明相关问题解答
  • 你写的按索引获取两个工作表的写法逻辑正确,仅注释有误,sheet2对应注释应为// 获取第二个工作表,更稳妥的写法是按工作表名称获取,避免后续调整工作表顺序导致引用错误:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetA = ss.getSheetByName("SheetA"); // 读取数据源表
var sheetB = ss.getSheetByName("SheetB"); // 写入目标表
  • 两种实现方案均可行,适用场景不同:
    1. 自定义函数方案:适合数据量较小的场景,无需手动运行脚本,数据更新自动刷新。注意你原来的写法有两处问题:一是调用时应该传入SheetA的单元格而不是SheetB的列,二是函数内部需要先解析传入的JSON字符串,且不存在未定义的i变量,修正后的示例如下:
    function parseJSON(jsonStr) {
      if (!jsonStr) return [];
      try {
        const parsed = JSON.parse(jsonStr);
        // 提取JSON外层数字键对应的菜品对象
        const dishObj = Object.values(parsed)[0];
        // 按顺序返回对应字段值,可根据需求调整字段
        return [dishObj.dish_name, dishObj.dish_price, dishObj.dish_quantity, dishObj.dish_size_name, dishObj.dish_size_price, dishObj.dish_addon_name, dishObj.dish_addon_price, dishObj.dish_variation_name, dishObj.dish_variation_price];
      } catch(e) {
        return "JSON解析错误";
      }
    }
    
    调用时在SheetB的目标单元格输入=parseJSON(SheetA!A1),下拉即可批量应用。
    2. 全量脚本方案:适合数据量较大(数百行以上)的场景,执行效率更高,不会触发自定义函数的配额限制,写入时直接调用sheetB.appendRow()即可。
表头与数据处理相关问题解答
  • 表头两种实现方式均支持:
    1. 提前声明表头数组:适合JSON字段固定的场景,稳定性更高,不会因个别JSON缺字段导致表头错乱,示例写法:const headers = ["dish_name","dish_price","dish_quantity","dish_size_name","dish_size_price","dish_addon_name","dish_addon_price","dish_variation_name","dish_variation_price"]
    2. 从JSON的key动态提取:适合字段不固定的场景,直接取第一个合法JSON对象的key作为表头即可,写法为const headers = Object.keys(dishObj)
  • Apps Script原生支持forEach循环遍历JSON内容,本身就是JavaScript运行环境,批量处理全量数据的示例脚本如下:
function batchParseJSON() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetA = ss.getSheetByName("SheetA");
  const sheetB = ss.getSheetByName("SheetB");
  // 提前声明固定表头
  const headers = ["dish_name","dish_price","dish_quantity","dish_size_name","dish_size_price","dish_addon_name","dish_addon_price","dish_variation_name","dish_variation_price"];
  // 清空目标表原有内容,写入表头
  sheetB.clearContents();
  sheetB.appendRow(headers);
  // 读取SheetA A列所有非空内容
  const jsonRows = sheetA.getRange(1, 1, sheetA.getLastRow(), 1).getValues();
  // 遍历所有JSON行
  jsonRows.forEach(row => {
    const jsonStr = row[0];
    if (!jsonStr) return;
    try {
      const parsed = JSON.parse(jsonStr);
      const dishObj = Object.values(parsed)[0];
      // 按表头顺序组装行数据,缺字段自动填空值
      const rowData = headers.map(header => dishObj[header] ?? "");
      sheetB.appendRow(rowData);
    } catch(e) {
      sheetB.appendRow(["JSON解析错误", ...new Array(headers.length - 1).fill("")]);
    }
  })
}
  • 若你JSON外层的数字键(如示例中的55)为需要保留的订单ID等字段,直接将该字段加入表头数组,组装行数据时加上Object.keys(parsed)[0]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:05