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

Google Script解析JSON文件导入Google Spreadsheet的编码报错问题咨询

解决方案

错误原因

你遇到的Unexpected token B in JSON at position 0报错核心是JSON内容读取时编码转换异常,原代码存在多处错误逻辑:

  • 读取文件内容时未显式指定编码,Google Apps Script默认编码规则可能和你的JSON文件编码不匹配
  • 已读取为字符串的内容被二次封装为Blob对象,导致编码被重复转换,出现乱码或多余不可见字符
  • 部分JSON文件导出时会自带UTF-8 BOM头(不可见前置字符),直接解析会触发首字符识别异常

修正后代码

function JSON_from_DRIVE() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Data");
  // 显式指定UTF-8编码读取文件内容
  var jsonStr = DriveApp.getFileById("1qwM5W6717FI28fkvBo9FcuJnqaaYo24H").getBlob().getDataAsString("UTF-8");
  // 去除前置BOM头和所有不可见控制字符
  jsonStr = jsonStr.replace(/^\s*[\ufeff\ufffe\u200b-\u200f]/g, '');
  // 直接解析处理后的字符串,移除冗余的Blob转换步骤
  var dataAll = JSON.parse(jsonStr);
  var dataRows = dataAll['Body'];
  var rowHeaders = Object.keys(dataRows[0]);
  var rows = [rowHeaders];
  for (var i = 0; i < dataRows.length; i++) {
    var rowData = [];
    for (var j = 0; j < rowHeaders.length; j++) {
      rowData.push(dataRows[i][rowHeaders[j]]); 
    }
    rows.push(rowData);
  }
  sheet.getRange(1,1,rows.length,rows[0].length).setValues(rows); 
}

关键修改说明

  • 调用getDataAsString()时显式传入"UTF-8"参数,强制按UTF-8编码解析文件二进制内容
  • 删除冗余的Utilities.newBlob二次转换逻辑,避免编码被重复转换损坏
  • 新增正则替换逻辑,移除字符串开头的BOM头、零宽空格等不可见控制字符,保证JSON解析器能正常识别首字符

如果运行后仍报错,可以在JSON.parse前加一行console.log(jsonStr.slice(0, 20)),查看读取到的内容前20个字符是否符合JSON格式要求。


内容的提问来源于stack exchange,提问作者Someone Technologist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:18:03