Google Apps Script提取custom_fields内display_value写入Google表格
解决方案
你不需要用split做字符串切割处理custom_fields内容——你看到的{type=x, resource_subtype=x, display_value=xxx...}格式,是JS对象被自动转为字符串写入表格时的显示效果,实际上JSON.parse解析接口返回后,data.custom_fields数组里的每一项都是标准结构化对象,直接读取对象的display_value属性即可,和字段在对象里的位置无关。
代码修改逻辑
把原来直接写入整个custom_fields数组项的部分,替换为读取对应项的display_value属性,同时加空值兜底,避免某一项不存在该属性时脚本运行报错。
修改后的完整代码如下:
function Users() { var options = { "headers" : { "Authorization": "API Key here" } } var response = UrlFetchApp.fetch("URL here", options); var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Tab Name here"); var dataAll = JSON.parse(response.getContentText()); var dataSet = dataAll.data; var rows = []; for (var i = 0; i < dataSet.length; i++) { var data = dataSet[i]; // 自定义字段统一做取值兜底,不存在display_value时留空 var cf = data.custom_fields || []; rows.push([ data.gid, data.name, data.permalink_url, data.due_on, cf[1]?.display_value || '', cf[2]?.display_value || '', cf[4]?.display_value || '', cf[5]?.display_value || '', cf[6]?.display_value || '', cf[7]?.display_value || '', cf[8]?.display_value || '', cf[9]?.display_value || '', ]); } // 写入前清空旧内容避免残留,可根据自身需求选择是否开启 // sheet.getRange(2, 1, sheet.getLastRow()-1, 12).clearContent(); var dataRange = sheet.getRange(2, 1, rows.length, 12); dataRange.setValues(rows); }
注:如果你的Apps Script运行时版本较老不支持
?.可选链语法,把对应自定义字段的取值替换为三元判断写法即可,例如cf[1] ? (cf[1].display_value || '') : '',运行效果完全一致。
优化建议
不建议硬编码custom_fields的数组索引取值,接口返回的自定义字段顺序可能发生调整,会导致取错字段。如果需要固定取某几个自定义字段的值,可以通过字段的gid或name匹配取值,示例逻辑:
// 传入单条数据的custom_fields数组和目标字段gid,返回对应的display_value function getCustomFieldValue(customFields, targetGid) { var matchField = customFields.find(field => field.gid === targetGid); return matchField?.display_value || ''; }
调用时直接传入对应字段的gid即可,不受数组顺序变化影响。

内容的提问来源于stack exchange,提问作者Kevin C
相关产品推荐
相关产品推荐

