【问题标题】:windows 8.1 node.js JSON.parse not working rightWindows 8.1 node.js JSON.parse 无法正常工作
【发布时间】:2015-09-01 12:46:33
【问题描述】:

我在 windows 上的 node.js 中的 JSON.parse 函数有一些问题我在命令行中收到此错误:

SyntaxError: Unexpected token ´╗┐
at Object.parse <native>
at R:\filelocation\server\server.js:13:18
at fs.js:334:14
at FSReqWrap.oncomplete <fs.js:95:15>

加载JSON文件的代码:

var users;
fs.readFile('database/userDB.json', 'utf8', function (err, data) {
    if (err) throw err;
    users = JSON.parse(data);
});

.json 文件:

{
    "test": "test2"
}

我什至发布这个的主要原因是它在我拥有的 linux 服务器上运行良好。

【问题讨论】:

    标签: javascript json node.js socket.io


    【解决方案1】:

    看起来是文本编码的问题。

    您确定它在您的 Windows 系统上真的保存为 UTF-8 吗?

    您能否在 Windows 系统上的某些文本编辑器或 Web 浏览器中打开它并验证编码是否符合您的预期? (您可能需要将文件扩展名更改为 .txt)

    另一个可能的问题是文件中可能存在byte order mark (BOM) 字符。 BOM 字符在 JSON 中是非法的,但一些编码转换器可以将它们放在那里。

    要缩小可能出现的问题,您可以进行更改:

    users = JSON.parse(data);
    

    暂时到这里:

    console.log(data);
    

    看看你是否得到了你所期望的。

    如果文本是一些垃圾,那么它可能是一个错误的编码。但是,如果文本看起来不错,那么您可能在其中有一个 BOM 字符,它是不可见的。

    作为一些解决方法,您可以尝试通过更改来删除第一个左大括号之前的每个字符:

    users = JSON.parse(data);
    

    到这里:

    users = JSON.parse(data.replace(/^[^{]+/g, ""));
    

    这不会修复错误的编码 - 但应删除 BOM 字符以防编码正确但 BOM 存在。

    【讨论】:

    • 补充一点,我不知道你用的是什么文本编辑器,但是 SublimeText 肯定有很多选项可以在有/没有编码的情况下保存。没有 BOM 的 UTF-8 就是其中之一。
    • @Andy 我正在使用 Visual Studio
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 2016-09-19
    • 2021-10-22
    相关资源
    最近更新 更多