You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 15:15:01