读取所有文件并以对象格式存储在node js / javascript中



我写了一段代码帮助我读取所有文件夹文件并将它们存储为数组格式所以我的代码看起来像这样

readAll.js

module.exports = readAllFile = () => {
const arr = [];
fs.readdir(path.join("./admin/requiredFiles"), (err, fileNames) => {
if (err) throw console.log(err.message);
// Loop fileNames array
fileNames.forEach((filename) => {
// Read file content
fs.readFile(
path.join("./admin/requiredFiles", `./${filename}`),
(err, data) => {
if (err) throw console.log(err.message);
// Log file content
arr.push(JSON.parse(data));
fs.writeFileSync(
path.join("./admin/execuetedFile", `config.json`),
`${JSON.stringify(arr)}`,
(err) => {
if (err) throw console.log(err.message);
}
);
}
);
});
});
};

这帮助我读取admin/requiredFiles中所有的文件让我将这些文件保存在executedFile

中但问题是这有助于我以数组格式存储数据但我想以对象形式存储数据

假设这是我的几个文件数据

file1.json

{
"admin":{
"right":"yes",
"permission":"available"
},
"admin_power":{
"addUser":"available",
"deleteUser":"available"
}
}

file2.json

{
"directory":{
"right":"yes",
"permission":"modified"
},
"directory_power":{
"add_directory":"yes",
"assign_directory":"yes"
}
}

这是我的一些示例文件它帮助我将它们保存为

格式

json

[
{
"admin":{
"right":"yes",
"permission":"available"
},
"admin_power":{
"addUser":"available",
"deleteUser":"available"
}
},
{
"directory":{
"right":"yes",
"permission":"modified"
},
"directory_power":{
"add_directory":"yes",
"assign_directory":"yes"
}
}
]

我不希望这个是数组形式我希望复制的文件是这样的

期望json

{
"admin":{
"right":"yes",
"permission":"available"
},
"admin_power":{
"addUser":"available",
"deleteUser":"available"
},
"directory":{
"right":"yes",
"permission":"modified"
},
"directory_power":{
"add_directory":"yes",
"assign_directory":"yes"
}
}

我只是想知道我应该做什么改变,这样我就可以在配置中得到我期望的格式输出,json

可以使用Object.keys()而不是Array.push()。解决方案是在读取每个文件数据时,应该使用Object。方法,然后循环遍历所有可用的键并将其添加到输出对象中。

module.exports = readAllFile = () => {
const output = {};
fs.readdir(path.join("./admin/requiredFiles"), (err, fileNames) => {
if (err) throw console.log(err.message);
// Loop fileNames array
fileNames.forEach((filename) => {
// Read file content
fs.readFile(
path.join("./admin/requiredFiles", `./${filename}`),
(err, data) => {
if (err) throw console.log(err.message);
// Log file content
const parsedData = JSON.parse(data);
for (let key of Object.keys(parsedData) {
output[key] = parsedData[key];
} 

fs.writeFileSync(
path.join("./admin/execuetedFile", `config.json`),
`${JSON.stringify(output)}`,
(err) => {
if (err) throw console.log(err.message);
}
);
}
);
});
});
};

使用一个对象来收集文件中的对象,Object.assign()(这里的doc)将复合解析的数据…

// use an object (probably should rename)
let arr = {};
// rather than push, assign
Object.assign(arr, JSON.parse(data));

再次强调,可能最好将arr重命名为result之类的东西。请记住在fs.writeFile中引用新的变量名。

最新更新