json - JSON.parse 无法解析 .json 文件
问题描述
我有以下代码:
router.get('/:pageName', function (req, res, next) {
var pageName = req.params.pageName;
var obj;
fs.readFile('./data/' + pageName + '.json', function (err, data) {
if (err) throw err;
obj = JSON.parse(data);
console.log(obj.title);
//render page with the data
});
});
我有一个名为about.json
in的文件./data
。
{ “类型”:“纯文本”, "title": "关于", “内容”:“Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。Sapien eget mi proin sed libero enim sed faucibus turpis。” }
当我在浏览器中访问该页面时,什么也没有发生,这出现在我的控制台中:
{ ^ SyntaxError:位置 0 处的 JSON 中的意外标记 在 JSON.parse() 在 C:\Users\username\source\repos\MyWebsite\MyWebsite\routes\index.js:34:16 在 FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:511:3)
我不明白为什么会出现此错误,因为我使用 JSONLint 检查了我的 .json 文件
**编辑:*
我还注意到令牌和位置 0 的 JSON 之间有额外的空格,我将它们复制到 unicode 字符检查器中:apps.timwhitlock.info/unicode/inspect?s=%EF%BB%BF它说,它是一个ZERO WIDTH NO-BREAK SPACE
. 那是什么?
解决方案
您可以尝试在解析之前替换它
var filter = new RegExp("\uFEFF");
data = data.replace(filter, '');
obj = JSON.parse(data);
或者您可以尝试使用“无 BOM”选项保存 json 文件。
推荐阅读
- google-app-engine - GCP 应用引擎灵活的云构建超时问题
- django - 基础模型的自定义管理器。用于过滤具有不同属性的子类的模型
- kivy - 警告在下一帧之前完成了太多迭代
- python - 比较两个增量表的架构
- java - 树状结构表中子项的根父项
- python - LSTM 中的 HiddenState 声明问题
- entity-framework - .NET Framework:如何使用代码优先约定禁用 EF6 中的延迟加载?
- r - 如何在 KNN 中找到 K
- hiveql - Apache Hive 上的查询结果不一致(联合、分组依据、时间戳)
- micronaut - 如何从发布者响应 Micronaut 中获取值