Hi I am writing a software using Rust. I am wanting to convert file path for example “~/Documents/code” to json something like:
{
"name": "coverage",
"type": "directory",
"children": [
{
"name": "coverage-final.json",
"type": "file"
},
{
"name": "index.html",
"type": "file"
}
]
}
Here is the Rust code I found:
use walkdir::WalkDir;
fn main() {
for e in WalkDir::new("./Documents").into_iter().filter_map(|e| e.ok()) {
if e.metadata().unwrap().is_file() {
println!("{}", e.path().display());
}
}
}
It prints out the paths:
./Cargo.lock
./.gitignore
./.git/config
./.git/HEAD
./.git/info/exclude
./.git/description
./.git/hooks/README.sample
./src/main.rs
...
This is the Javascript code that converts the array of paths to json that I found:
let paths = [
"path1/subpath1/file111.doc",
"path1/subpath1/file112.doc",
"path1/subpath2/file121.doc",
"path1/subpath2/file122.doc",
"path2/subpath1/file211.doc",
"path2/subpath1/file212.doc",
"path2/subpath2/file221.doc",
"path2/subpath2/file222.doc",
"path2/additionalpath3/additionalpath1/file2311.doc"
];
let treePath = {};
paths.forEach(path => {
let levels = path.split("/");
let file = levels.pop();
let prevLevel = treePath;
let prevProp = levels.shift();
levels.forEach(prop => {
prevLevel[prevProp] = prevLevel[prevProp] || {};
prevLevel = prevLevel[prevProp];
prevProp = prop;
});
prevLevel[prevProp] = (prevLevel[prevProp] || []).concat([file]);
});
console.log(treePath);
I look forward to hearing from everyone! Thanks a lot!