问了好些问题,今天也分享个:node读写json文件
发布于 3 年前 作者 JarvisQJ 4069 次浏览 来自 分享

该方法可用于修改配置文件,直接上代码 例如:有json文件test1.json,内容是{“name”:“li”}。现需将name属性改为hao。代码如下, fs.readFile(‘test1.json’,‘utf8’,function (err, data) { if(err) console.log(err); var test1=JSON.parse(data); test1.name=“hao”; var t = JSON.stringify(test1); fs.writeFileSync(‘test1.json’,t) });

正常情况下从JSON文件读取到字符后再通过JSON.parse没什么问题,只要格式不出错。

有时在确保JSON格式正确时仍然会出现unexpected token异常

经过调查发现里面有不会显示的unicode字符

于是确定是UTF-8的问题,utf-8分有dom版和无dom版,一般编辑器不刻意设置会默认保存为带dom的utf8

解决办法是先将读到的文件转成二进制,然后检索dom符号删除

代码实现部分

function readText(pathname) { var bin = fs.readFileSync(pathname);

if (bin[0] === 0xEF && bin[1] === 0xBB && bin[2] === 0xBF) {
    bin = bin.slice(3);
}

return bin.toString('utf-8');

}

2 回复

你指的应该是BOM吧,而不是DOM,话说这个函数在node源代码中也有,因为node引入文件本质上还是文件内容的读取:

/**
	* Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
	* because the buffer-to-string conversion in `fs.readFileSync()`
	* translates it to FEFF, the UTF-16 BOM.
*/
function stripBOM(content) {
	if (content.charCodeAt(0) === 0xFEFF) {
		content = content.slice(1);
	}
return content;
}

@hyj1991 尴尬,我写错了

回到顶部