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
相关产品推荐
相关产品推荐

