Node.js开发REST接口时JSON.parse报位置0存在意外字符如何解决
问题原因与解决方法
这个报错绝大多数场景是由你的miun-db.json文件携带**UTF-8 BOM(字节顺序标记)**导致的:
UTF-8 BOM是位于文件开头的不可见特殊字符(编码为
U+FEFF),Windows平台下很多旧编辑器(如系统自带记事本)默认保存UTF-8文件时会自动添加该标记。大部分在线JSON验证工具会自动忽略文件开头的BOM,所以你验证时会提示内容合法,但Node.js的JSON.parse方法不会自动过滤该字符,会将其识别为非法的JSON起始字符,抛出position 0的语法错误。
方案1:直接修复源文件
用VS Code、Notepad++等编辑器打开miun-db.json,将文件保存格式修改为「UTF-8 无BOM」即可,后续再操作该文件也不会再触发该问题。
方案2:代码层面兼容处理
如果不想修改源文件,可在读取内容后手动移除BOM头再执行解析,修改后代码如下:
// GET courses const fs = require('fs'); app.get('/api/courses', function(req, res) { // 指定utf8编码读取为字符串,再正则替换掉开头的BOM字符 var rawdata = fs.readFileSync('miun-db.json', 'utf8').replace(/^\uFEFF/, ''); var data = JSON.parse(rawdata); res.send(data.courses); });
其他少见排查方向
如果上述方案未解决问题,可按以下步骤排查:
- 打印
rawdata变量,确认读取到的内容是你预期的JSON内容,排查是否因相对路径错误读取到了其他损坏的同名文件 - 确认JSON文件无读取权限问题,未出现读取内容为空的情况
内容的提问来源于stack exchange,提问作者fab680
相关产品推荐
相关产品推荐

