一、读取带注释的json文件
直接读取带注释的json文件并反序列化时会报错,因为JSON.parse()不支持带注释的json格式,这里推荐使用第三方库‘json5’,类似的库还有很多,这里不做介绍;
npm install json5
const JSON5 = require('json5');
const fs = require('fs');
let config = fs.readFileSync('c://test.json');
config = JSON5.parse(config.toString('utf-8'));
return config;
二、读取格式为UTF-8 BOM格式的json文件
有的操作系统下json文件格式为UTF-8 BOM,会在文件头添加0xEF、0xBB、0xBF三个字节,这同样会导致在反序列化时报错;需要在读取后先删除这三个字节在做反序列化;
const fs = require('fs');
let config = fs.readFileSync('c://test.json');
if (config[0] === 0xEF && config[1] === 0xBB && config[2] === 0xBF) {
config = config.slice(3);
}
config = JSON.parse(config.toString('utf-8'));
return config;
总结
我们可以结合这两个例子,把读取JOSN文件做一个通用的方法,结合如下;
/**
* 读取指定地址的json文件,并返回反序列化后的js对象
* @param filePath json文件路径
* @returns {} 反序列化后的对象
*/
module.exports.readJson = (filePath) => {
const JSON5 = require('json5');
const fs = require('fs');
let config = fs.readFileSync(filePath);
if (config[0] === 0xEF && config[1] === 0xBB && config[2] === 0xBF) {
config = config.slice(3);
}
config = JSON5.parse(config.toString('utf-8'));
return config;
}