我在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服务器上运行良好。
答案 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字符。