先上代码 test.json内容
{"id":123,"name":"name"}
test.js
var fs = require('fs');
function Test() {}
module.exports = Test;
Test.fun = function() {
fs.readFile("./json/test.json", 'utf8', function(err, val) {
console.log(val);//这里输出内容为{"id":123,"name":"name"}
//JSON.parse(val);//这里直接报错 SyntaxError: Unexpected token
var temp = '{"id":123,"name":"name"}';
temp = JSON.parse(temp);//这里没问题
console.log(temp.id);
});
};
同样的json串,为什么我从文件里读出来就不能JSON.parse()了呢? eval也不行。
typeof Val 看看类型是不是字符串
这是文件系统,文件流是个Buffer,不能用JSON.parse()解析的
val = val.toString()
@jiurihuahuo 读的时候 加了utf8参数,得到的val已经是字符串了 不是buffer
@elrrrrrrr 已经是字符串了。
@ncuzp 看了下,是字符串。
json文件可直接require
来自酷炫的 CNodeMD
@klesh 嗯,这个我知道。 但是我想不明白为什么通过fs读出来的就不能JSON.parse()了呢
可能是符号什么的打错了,打成全角字符了。仔细检查一遍,我用你的代码没问题。
@coordcn 符号没问题,确认过了。 你 JSON.parse(val) 这个一行代码能通过?
是不是在windows底下?如果是的话看看是不是存成utf-8带bom格式了。
是buffer不是string,输出的话可能console.log进行toString()操作 buffer属于对象当然不能JSON.parse了
@coordcn 确实是在windows下,我把第一次console.log(val)这里输出的结果直接在浏览器控制台里 JSON.pars()也报错。应该就是windows的原因了。 但是我直接把整个脚本在linux里也报错呢。
@shynome 不是buffer啊,我读的时候已经加了utf8了,而且第一个console.log(val)这里输出的已经是正确的json串了,不是buffer,看我代码注释。
@imhered 本地重试了一下ok, 那 json 文件是 utf-8 编码的吗? test.json 改成了 gbk 编码,console.log 输出正常,parse 报错
@elrrrrrrr 刚测了下,文件格式是utf8就不能parse,我改成ansi读出来就能parse了,看样子是编码问题了。
基本可以肯定是存成utf-8带bom格式了。
@coordcn 嗯,刚测了下,在第一次输出结果 { 这个前面移动了下光标,确实有东西。