Windows 8.1 node.js JSON.parse无法正常工作

时间:2015-06-16 15:31:10

标签: javascript json node.js socket.io

我在Windows上的node.js中遇到JSON.parse函数的问题我在命令行中遇到了这个错误:

document.querySelector("input").onclick = function() {
    var uri = "data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7";
    window.open(uri);
};

加载JSON文件的代码:

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);
});

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

1 个答案:

答案 0 :(得分:0)

看起来像文本编码有问题。

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

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

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

要缩小可能出现的问题:

users = JSON.parse(data);
对此暂时:

console.log(data);

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

如果文本是垃圾,那么它可能是错误的编码。但是如果文本看起来很好,那么你可能会有一个BOM字符,这是不可见的。

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

users = JSON.parse(data);

到此:

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

这不会修复错误的编码 - 但如果编码正确但BOM存在,则应删除BOM字符。

相关问题