首页 > 解决方案 > 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.jsonin的文件./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. 那是什么?

标签: jsonnode.js

解决方案


您可以尝试在解析之前替换它

var filter = new RegExp("\uFEFF");
data = data.replace(filter, '');
obj = JSON.parse(data);

或者您可以尝试使用“无 BOM”选项保存 json 文件。


推荐阅读