Google Script调用CRM接口解析JSON写表格异常及子实体获取问题
解决Google Script调用CRM接口的问题:部分接口无数据+获取子实体
一、先排查接口返回的JSON结构差异
你碰到的这种“部分接口能拿title,另一部分拿不到body”的问题,我之前帮很多开发者排查过,大概率是不同接口返回的JSON字段结构不一致。举两个常见的差异场景:
- 能正常工作的接口,
title可能是顶层直接返回的字段:{ "title": "xxx", ... } - 无法获取数据的接口,
body可能嵌套在子对象里(比如{ "content": { "body": "xxx" }, ... }),或者字段名大小写和你写的不一致(比如接口返回的是Body而非body)
快速调试方法
在脚本里加入日志打印,把接口返回的完整JSON结构输出来,对比能工作和不能工作的接口差异:
function fetchCRMData() { const targetUrl = "你的CRM接口URL"; const response = UrlFetchApp.fetch(targetUrl); const data = JSON.parse(response.getContentText()); // 打印格式化后的完整JSON,方便查看结构 Logger.log(JSON.stringify(data, null, 2)); // 优化后的写入逻辑:先判断字段是否存在再处理 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); if (data.body) { sheet.appendRow([data.body]); } else if (data.content?.body) { // 兼容嵌套结构的情况 sheet.appendRow([data.content.body]); } else { sheet.appendRow(["未获取到body字段"]); } }
运行后,去脚本编辑器的「查看」→「日志」里查看完整的JSON结构,就能一眼看出body字段的实际位置了。
二、获取子实体数据(比如From中的ID)
同样要先确认子实体的结构,接口返回通常有两种情况,对应不同的获取方式:
情况1:From是单个对象
如果接口返回是这种结构:
{ "title": "客户反馈", "from": { "id": "CRM-12345", "name": "Robert" } }
获取From的ID可以这么写:
// 用可选链操作符?.避免子对象为空时报错 const fromId = data.from?.id; sheet.appendRow([data.title, fromId]);
情况2:From是数组(支持多个发送方)
如果接口返回是数组结构:
{ "title": "团队协作任务", "from": [ { "id": "CRM-12345", "name": "Robert" }, { "id": "CRM-67890", "name": "Alice" } ] }
可以获取第一个From的ID,或者遍历所有子实体写入多行:
// 获取第一个From的ID const firstFromId = data.from?.[0]?.id; sheet.appendRow([data.title, firstFromId]); // 遍历所有From,逐条写入表格 data.from?.forEach(item => { sheet.appendRow([data.title, item.id, item.name]); });
三、通用优化建议
- 添加错误捕获:用
try-catch包裹接口调用逻辑,避免单个接口失败导致整个脚本崩溃:
function fetchCRMData() { try { const targetUrl = "你的CRM接口URL"; const response = UrlFetchApp.fetch(targetUrl); const data = JSON.parse(response.getContentText()); // 你的数据处理和写入逻辑... } catch (error) { Logger.log("接口调用失败:" + error.message); const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.appendRow(["接口调用失败:" + error.message]); } }
- 始终判断字段存在性:不管是顶层字段还是子实体字段,用
?.可选链或者if判断后再使用,避免因字段缺失导致的脚本报错。
内容的提问来源于stack exchange,提问作者Robert William Millard
相关产品推荐
相关产品推荐

