Google Apps Script问题:修复External IDs列显示[object Object]异常
解决Google Apps Script中External IDs列显示[object Object]的问题
原函数运行后,External IDs列所有行均显示[object Object],无法展示预期的键值对格式。需要修改代码,让该列呈现类似{isrc=123,ean=456}的格式。
问题根源
track.external_ids是一个JavaScript对象,直接调用setText(value)时,对象会被默认转换为字符串[object Object],而非我们需要的键值对格式。
修改方案
添加一个辅助函数,将对象转换为指定格式的字符串:遍历对象的键值对,拼接成键=值的形式,用逗号分隔后包裹在大括号中。然后在处理track.external_ids字段时,使用这个函数转换对象。
修改后的完整代码
function func() { var data = [ { "track": { "name": "Song1", "album": {"name":"Album1"}, "id": "ABC", "url": "www.example.com/1", "external_ids":{"isrc":"123","ean":"456"} }, "added_at":"today1" }, { "track": { "name": "Song2", "album": {"name":"Album2"}, "id": "DEF", "url": "www.example.com/2", "external_ids":{"isrc":"123"} }, "added_at":"today2" }, { "track": { "name": "Song3", "album": {"name":"Album3"}, "id": "XYZ", "url": "www.example.com/3", "external_ids":{"isrc":"123","upc":"789"} }, "added_at":"today3" } ]; // 新增辅助函数:将对象转换为指定格式的字符串 function formatExternalIds(obj) { var pairs = []; for (var key in obj) { if (obj.hasOwnProperty(key)) { pairs.push(`${key}=${obj[key]}`); } } return `{${pairs.join(',')}}`; } var headers = [["Track ID", "Name", "Album", "Added At","External IDs"]]; var keys = ["track.id", "track.name", "track.album.name", "added_at", "track.external_ids"]; var richTextValues = data.map((item) => keys.map(c => { var keysArr = c.split('.'); var value = keysArr.reduce((a, b) => a[b], item); // 处理external_ids字段,转换为指定格式 var text = c === 'track.external_ids' ? formatExternalIds(value) : value; var rt = SpreadsheetApp.newRichTextValue().setText(text); if (keysArr[0] === "track" && keysArr[1] === "id") rt.setLinkUrl(item.track.url); return rt.build(); }) ); var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 设置表头 sheet.getRange(1,1,1,headers[0].length).setValues(headers); // 设置内容 sheet.getRange(2, 1, richTextValues.length, richTextValues[0].length).setRichTextValues(richTextValues); }
说明
- 新增的
formatExternalIds函数负责将对象转换为目标格式,确保每个键值对以key=value形式呈现,多个键值对用逗号分隔,整体包裹在大括号中。 - 在遍历字段时,判断当前字段是否为
track.external_ids,若是则调用转换函数生成字符串,否则直接使用原始值。 - 原代码中多余的
keys变量判断已移除,直接用split('.')处理所有字段路径,逻辑更简洁。
内容的提问来源于stack exchange,提问作者Shantanu
相关产品推荐
相关产品推荐

