Google Sheets对接lemlist API JSON解析错误及CSV导入咨询
报错根因排查与解决方案
关于 Unexpected token < in JSON at position 0 的本质原因
这个报错的核心是接口返回的内容根本不是JSON格式:所有以<开头的响应都是HTML类型的页面内容(通常是认证失败/路径错误时服务器返回的4xx/5xx错误提示页),根本不是接口返回的业务数据,自然无法被JSON解析器处理。
你当前脚本的核心问题是对lemlist的API认证方式理解错误:把Basic Auth的认证标识--user:key直接拼到了请求URL的路径里,服务器收到这种不合法的请求,就会直接返回HTML格式的错误页,和lemlist本身的JSON返回格式完全无关。
正确的Apps Script请求写法
lemlist的团队信息接口采用Basic Auth认证模式,需要将API密钥放到请求头中传递,而非拼接在URL上:
function callNumbers() { // 替换为自己账号的实际API Key const LEMLIST_API_KEY = "你的个人API密钥"; const requestConfig = { method: "get", headers: { // lemlist认证要求:API Key作为用户名,密码留空后做Base64编码 "Authorization": "Basic " + Utilities.base64Encode(`${LEMLIST_API_KEY}:`) }, // 允许获取HTTP错误的响应内容,不会因为非200状态码直接中断脚本 muteHttpExceptions: true }; const response = UrlFetchApp.fetch("https://api.lemlist.com/api/team", requestConfig); const responseContent = response.getContentText(); // 先打印原始响应排查问题,不要直接做JSON解析 Logger.log("接口原始返回:" + responseContent); try { const parsedData = JSON.parse(responseContent); Logger.log("接口返回的团队名称:" + parsedData.name); } catch (err) { Logger.log("响应非合法JSON,错误信息:" + err.message); } }
常见疑问解答
1. 是否必须接口返回标准JSON才能完成对接?
只要请求链路正确、认证通过,lemlist的官方接口会固定返回符合规范的JSON结构,不存在需要你修改外部接口返回内容的场景。
如果后续碰到少量JSON兼容性问题(比如官方示例里的字段末尾多余逗号),可以在本地解析前简单做文本清洗(比如替换掉对象闭合括号前的多余逗号),完全不需要改动服务端的返回逻辑。
2. 能否通过脚本把获取到的CSV内容导入Google Sheets?
完全可以实现。Apps Script自带CSV解析能力,不需要依赖外部工具:
- 先用
UrlFetchApp.fetch拿到CSV格式的文本内容 - 用内置的
Utilities.parseCsv()方法把纯文本CSV转换为匹配Sheet单元格格式的二维数组 - 调用
setValues()方法把二维数组直接写入指定的Sheet范围即可
示例参考代码:
function writeCsvToSheet(csvText, sheetName) { const currentSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 获取目标Sheet,不存在则自动新建 let targetSheet = currentSpreadsheet.getSheetByName(sheetName); if (!targetSheet) targetSheet = currentSpreadsheet.insertSheet(sheetName); // 解析CSV文本为二维数组 const csvRows = Utilities.parseCsv(csvText); // 按数组尺寸写入单元格 targetSheet.getRange(1, 1, csvRows.length, csvRows[0].length).setValues(csvRows); }
内容的提问来源于stack exchange,提问作者Juan Manuel Guiragossian
相关产品推荐
相关产品推荐

