javascript - 将树状文件目录转换为 JSON 对象

标签 javascript json treeview

我正在尝试将文件目录响应转换为 JSON 对象。 这是文件目录函数的响应副本。

[ 'C:/Users/Freddy/System/storage/Objects/Users/1',
  'C:/Users/Freddy/System/storage/Objects/Users/1/email',
  'C:/Users/Freddy/System/storage/Objects/Users/1/email/FreddyMcGee@Gmail.com',
  'C:/Users/Freddy/System/storage/Objects/Users/1/etc',
  'C:/Users/Freddy/System/storage/Objects/Users/1/etc/etc',
  'C:/Users/Freddy/System/storage/Objects/Users/1/password',
  'C:/Users/Freddy/System/storage/Objects/Users/1/password/123123123213',
  'C:/Users/Freddy/System/storage/Objects/Users/1/username',
  'C:/Users/Freddy/System/storage/Objects/Users/1/username/Freddy1337' ]

这是我正在尝试/旨在实现的输出:

1 : {
    email: "FreddyMcGee@Gmail.com",
    etc: etc,
    password: "12313123",
    username: "Freddy1337"
}

目录中的最短路径就是 JSON 对象的开始。所有以前的“文件夹目录”都被剪掉了。

我尝试自己编写一个函数来执行此操作,但是由于文件夹“Users”出现了两次,我遇到了一些麻烦。该函数也没有正确遍历节点,它只是在设置的部分切割并将它们粘合在一起。太可怕了,我有点惭愧。

function TreeToJson(directory, cutAfter){
    for (var i = directory.length - 1; i >= 0; i--) {
        directory[i] = directory[i].substr(directory[i].indexOf(cutAfter) + cutAfter.length, directory[i].length - 1);
        directory[i] = directory[i].split("/");
        directory[i].shift();
    };
    jsonA = {}; jsonB = {}; jsonC = {};
    for (var i = 0; i < directory.length; i++) {
        if(directory[i][2] != undefined){
        jsonB[directory[i][2]] = directory[i][3]
        }
    };
    jsonC[Number([directory[0][1]])] = jsonB;
    jsonA[directory[0][0]] = jsonC;
    return jsonA;
}
TreeToJson(files, 'Objects');

如果有人可以向我展示将“ TreeView 模型”转换为“JSON 对象”的更好方法,我将不胜感激。我很好奇其他开发人员会采用的方法,以及最简单的解决方案是什么。

最佳答案

一个非常常见的操作是提取字符串中最后一个斜线之后的部分,所以我会为此创建一个正则表达式函数。从数组中的第一个元素开始识别起始目录名称,然后使用一个简单的 for 循环遍历数组的其余部分,两个两个地迭代,提取键和值:

const input = [
  'C:/Users/Freddy/System/storage/Objects/Users/1',
  'C:/Users/Freddy/System/storage/Objects/Users/1/email',
  'C:/Users/Freddy/System/storage/Objects/Users/1/email/FreddyMcGee@Gmail.com',
  'C:/Users/Freddy/System/storage/Objects/Users/1/etc',
  'C:/Users/Freddy/System/storage/Objects/Users/1/etc/etc',
  'C:/Users/Freddy/System/storage/Objects/Users/1/password',
  'C:/Users/Freddy/System/storage/Objects/Users/1/password/123123123213',
  'C:/Users/Freddy/System/storage/Objects/Users/1/username',
  'C:/Users/Freddy/System/storage/Objects/Users/1/username/Freddy1337'
];
const lastPart = str => str.match(/\/([^\/]+)$/)[1];
const [baseDirectory, ...keysVals] = input;
const dirName = lastPart(baseDirectory);
const dirObj = {};
for (let i = 0; i < keysVals.length; i += 2) {
  const key = lastPart(keysVals[i]);
  const val = lastPart(keysVals[i + 1]);
  dirObj[key] = val;
}
const output = { [dirName]: dirObj };
console.log(output);

关于javascript - 将树状文件目录转换为 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51228768/

相关文章:

javascript - 如何动态调整div的left属性

javascript - 使用 Selenium 突出显示 WebElement 并恢复原始边框?

javascript - Jquery 无限滚动脚本中的“阅读更多”按钮

javascript - 在 Flot 中设置自定义 X 轴值

ios - ObjectMapper如何映射[String :CustomObject] With Index as CustomObject Property的Dictionary

javascript - 我想获取所有选中复选框的值

javascript - 带有自定义 json 数据的 JsTree

c++ - 我怎样才能找到下载的 C++ 软件源代码的结构

delphi - TTreeView - 更改展开和折叠图像?

c# - 如何将 ReactiveUI 与分层数据源( TreeView )一起使用