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

如何向JSON变量传值,实现Google Forms数据同步到实时数据库

解决方案

首先你原代码最大的问题是把所有结构化数据都join成了字符串传递,没法对应每个问题的选项、正确答案归属,我们直接调整数据传递逻辑,构造符合要求的JSON结构即可,修改后的完整代码如下:

第一步:修改extractFormData函数

调整数据收集逻辑,直接按问题分组存储所有属性,不再打散为单独数组:

function extractFormData(){
  var form = FormApp.getActiveForm();
  var form_title = DriveApp.getFileById(form.getId()).getName();
  var items = form.getItems();
  // 存储所有问题的结构化数据
  var questionsData = [];

  for (var i = 0; i < items.length; i++) {
    var item = items[i];
    var currentQuestion = {};
    switch(item.getType()) {
      case FormApp.ItemType.MULTIPLE_CHOICE:
        currentQuestion["question-type"] = "multiple-choice";
        var question = item.asMultipleChoiceItem();
        currentQuestion["question"] = question.getTitle();
        var answers = question.getChoices();
        var correctAnswers = [];
        // 遍历添加选项
        for (var j = 0; j < answers.length; j++) {
          var answer = answers[j];
          currentQuestion[`option${j+1}`] = answer.getValue();
          if(answer.isCorrectAnswer()) {
            correctAnswers.push(answer.getValue());
          }
        }
        // 单选题正确答案只有一个,直接取第一个
        currentQuestion["answer"] = correctAnswers[0];
        questionsData.push(currentQuestion);
        break;
      case FormApp.ItemType.CHECKBOX:
        currentQuestion["question-type"] = "checkbox";
        var question = item.asCheckboxItem();
        currentQuestion["question"] = question.getTitle();
        var answers = question.getChoices();
        var correctAnswers = [];
        for (var k = 0; k < answers.length; k++) {
          var answer = answers[k];
          currentQuestion[`option${k+1}`] = answer.getValue();
          if(answer.isCorrectAnswer()) {
            correctAnswers.push(answer.getValue());
          }
        }
        // 多选题正确答案拼接为逗号分隔字符串
        currentQuestion["answer"] = correctAnswers.join(", ");
        questionsData.push(currentQuestion);
        break;
      case FormApp.ItemType.PARAGRAPH_TEXT:
      case FormApp.ItemType.TEXT:
        currentQuestion["question-type"] = "Input-text";
        var question = item.getType() === FormApp.ItemType.PARAGRAPH_TEXT ? item.asParagraphTextItem() : item.asTextItem();
        currentQuestion["question"] = question.getTitle();
        currentQuestion["answer"] = "user-input";
        questionsData.push(currentQuestion);
        break;
    }
  }
  // 直接传递结构化数组,不要转字符串
  sendExtractedData(form_title, questionsData);
}

第二步:修改sendExtractedData函数

按要求构造最终导出的JSON结构,写入实时数据库:

function sendExtractedData(form_title, questionsData) {
  var quizDatabase = FirebaseApp.getDatabaseByUrl('URL REALTIME DATABASE');
  var newDate = new Date();
  var dateAdded = newDate.toLocaleString("en-US");
  var dataToExport = {};
  // 外层键为表单标题
  dataToExport[form_title] = {};
  // 遍历填充每个问题的字段
  questionsData.forEach((question, index) => {
    // 问题序号从1开始
    var questionIndex = (index + 1).toString();
    dataToExport[form_title][questionIndex] = question;
    // 统一添加日期字段
    dataToExport[form_title][questionIndex]["date-added"] = dateAdded;
  });
  // 写入数据库
  quizDatabase.setData("nameofdatabase/"+ form_title +"/", dataToExport[form_title]);
}

注意事项

  • 上述代码已经完全匹配你给出的目标JSON结构,会自动识别题目类型、生成对应option字段、拼接正确答案
  • 文本输入类题目会自动设置answer为user-input,符合你的要求
  • 如果需要存储用户提交的输入值,可在表单提交触发的回调中额外获取用户输入内容,补充到对应题目的user-input字段即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:36:04