我正在尝试采用一种文件夹结构,并将其转换为这种格式的JSON:
- Folder
-- Image.png
-- Image_1.png
- Folder2
-- Image.png
-- Image_1.png
具有这样的结构:
{
"Folder": ["Image.png", "Image_1.png"],
"Folder2": ["Image.png", "Image_1.png"]
}
谢谢。这样可能吗?
编辑:这是我的开始,但是尝试向下钻取到文件夹中的文件夹时递归中断
const fs = require('fs');
const path = require('path');
var structure = {};
function findFiles(folder) {
fs.readdir(folder, (err, files) => {
files.forEach(file => {
console.log(file);
if(fs.lstatSync(__dirname + "/" + file).isDirectory()){
console.log(folder)
findFiles(folder + "/" + file);
}
});
})
}
findFiles(__dirname)
答案 0 :(得分:1)
有趣的问题。这是我的解决方案,使用同步功能。输出JSON将包含一个对象数组,该对象数组可以是字符串(用于文件名)或对象(用于目录)。
代码(live):
var fs = require('fs'), path = require('path'), util = require('util');
var dirToJSON = function(dir, done) {
var results = [];
function recWalk(d, res) {
var list = fs.readdirSync(d);
list.forEach((name) => {
var tempResults = [];
var file = path.resolve(d, name);
var stat = fs.statSync(file);
if (stat && stat.isDirectory()) {
recWalk(file, tempResults);
var obj = {};
obj[name] = tempResults;
res.push(obj);
} else {
res.push(name);
}
});
}
try {
recWalk(dir, results);
done(null, results);
} catch(err) {
done(err);
}
};
dirToJSON("/home/", function(err, results) {
if (err) console.log(err);
else console.log(util.inspect(results, {showHidden: false, depth: null}));
});
输出:
[ { node: [ '.bash_logout', '.bashrc', '.profile' ] },
{ runner:
[ '.bash_logout',
'.bashrc',
'.profile',
'config.json',
'index.js',
{ node_modules: [] },
'test.js' ] } ]
请注意,我正在使用util.inspect
打印结果以允许对象具有无限深度,但是您也可以执行JSON.stringify(results)