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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:00