无需OAuth,如何获取自身拥有的Google Form的JSON响应对象?
解决方案:无需OAuth获取自有Google Form的结构化JSON
方法1:用Google Apps Script导出目标格式JSON
作为表单所有者,你可以通过Apps Script直接读取表单结构,生成完全符合你需求的JSON:
- 打开目标Google Form,点击右上角「扩展程序」→「Apps Script」
- 替换默认代码为以下脚本:
function exportFormAsJSON() { const form = FormApp.getActiveForm(); const formId = form.getId(); const info = { title: form.getTitle(), description: form.getDescription(), documentTitle: form.getTitle() }; const settings = { quizSettings: { isQuiz: form.isQuiz() } }; const revisionId = form.getVersion().toString().padStart(8, '0'); const responderUri = form.getPublishedUrl(); const items = form.getItems().map(item => { const itemObj = { itemId: item.getId() }; // 处理图片项 if (item.getType() === FormApp.ItemType.IMAGE) { const imageItem = item.asImageItem(); itemObj.imageItem = { image: { contentUri: imageItem.getImage().getUrl(), properties: { alignment: "LEFT" } } }; } // 处理单选问题 else if (item.getType() === FormApp.ItemType.MULTIPLE_CHOICE) { const questionItem = item.asMultipleChoiceItem(); itemObj.title = questionItem.getTitle(); itemObj.questionItem = { question: { questionId: questionItem.getId(), choiceQuestion: { type: "RADIO", options: questionItem.getChoices().map(choice => ({ value: choice.getValue() })) } } }; } // 可扩展支持复选框、文本框等其他类型 return itemObj; }); const formJSON = { formId, info, settings, revisionId, responderUri, items }; // 输出到日志查看,或部署为Web应用直接获取JSON console.log(JSON.stringify(formJSON, null, 2)); // 可选:部署为Web应用后,访问URL即可拿到JSON响应 return ContentService.createTextOutput(JSON.stringify(formJSON, null, 2)) .setMimeType(ContentService.MimeType.JSON); }
- 点击「运行」,首次运行需完成简单授权(仅针对你的表单,安全可控)
- 运行后,通过「查看」→「日志」获取JSON;或部署为Web应用,直接通过URL调用获取结构化数据
方法2:手动解析表单HTML(应急方案)
如果不想用Apps Script,可从页面源码提取结构化数据:
- 打开表单页面,右键「查看页面源代码」
- 搜索
FB_PUBLIC_LOAD_DATA_,该变量包含表单的核心结构化数据(虽非标准API格式,但可提取所需字段) - 用Python/Node.js编写简单脚本,将该变量内容转换为你需要的JSON结构
关于API密钥的限制说明
新Google Forms API明确规定:API密钥仅支持提交表单响应的请求,读取表单结构必须使用OAuth 2.0认证,这是官方权限限制,没有绕过途径。
内容的提问来源于stack exchange,提问作者Andrea Fletcher
相关产品推荐
相关产品推荐

