Javascript 如何将路径数组转换为JSON结构?

Javascript 如何将路径数组转换为JSON结构?,javascript,json,javascript-objects,Javascript,Json,Javascript Objects,我发现了这个问题,但我不确定如何在JavaScript中获得所需的结果: 我正在尝试将路径数组转换为JSON树: 但我的道路正在被覆盖 我试着采取这样的方式: [ '/org/openbmc/path1', '/org/openbmc/path2', ... ] 。。。把它变成 output = { org: { openbmc: { path1: {}, path2: {} } } } 我确信这很容易

我发现了这个问题,但我不确定如何在JavaScript中获得所需的结果:

我正在尝试将路径数组转换为JSON树:

但我的道路正在被覆盖

我试着采取这样的方式:

[
    '/org/openbmc/path1', 
    '/org/openbmc/path2', 
    ...
]
。。。把它变成

output = {
   org: {
     openbmc: {
       path1: {},
       path2: {}
     }
   }
}
我确信这很容易,但我遗漏了一些东西。

const data=[
“/org/openbmc/examples/path0/PythonObj”,
“/org/openbmc/UserManager/Group”,
“/org/openbmc/HostIpmi/1”,
“/org/openbmc/HostServices”,
“/org/openbmc/UserManager/Users”,
“/org/openbmc/records/events”,
“/org/openbmc/examples/path1/SDBusObj”,
“/org/openbmc/UserManager/User”,
“/org/openbmc/examples/path0/SDBusObj”,
“/org/openbmc/examples/path1/PythonObj”,
“/org/openbmc/UserManager/Groups”,
“/org/openbmc/NetworkManager/Interface”
];
常量输出={};
让电流;
for(数据的常量路径){
电流=输出;
对于(路径的常量段。拆分('/')){
如果(段!=''){
如果(!(当前段)){
当前[段]={};
}
当前=当前[段];
}
}
}
控制台日志(输出);
您的解决方案很接近,只是没有正确重置
当前变量。使用以下命令:

电流=输出;
与此相反:

current=output[path[0]];

此功能应执行以下操作:

var parsePathArray = function() {
    var parsed = {};
    for(var i = 0; i < paths.length; i++) {
        var position = parsed;
        var split = paths[i].split('/');
        for(var j = 0; j < split.length; j++) {
            if(split[j] !== "") {
                if(typeof position[split[j]] === 'undefined')
                    position[split[j]] = {};
                position = position[split[j]];
            }
        }
    }
    return parsed;
}
var parsePathArray=function(){
var解析={};
对于(var i=0;i

演示
var路径=[
“/org/openbmc/UserManager/Group”,
“/org/stackExchange/StackOverflow”,
“/org/stackExchange/StackOverflow/Meta”,
“/org/stackExchange/Programmers”,
“/org/stackExchange/phenology”,
“/org/stackExchange/religation/christian”,
“/org/openbmc/records/events”,
“/org/stackExchange/宗教/印度教”,
“/org/openbmc/HostServices”,
“/org/openbmc/UserManager/Users”,
“/org/openbmc/records/transactions”,
“/org/stackExchange/religation/Islam”,
“/org/openbmc/UserManager/Groups”,
“/org/openbmc/NetworkManager/Interface”
];
var parsePathArray=函数(){
var解析={};
对于(var i=0;i[
  '/home/',
  '/home/user/.bashrc',
  '/var/',
  '/var/test.conf',
  '/var/www/',
  '/var/www/index.html',
  '/var/www/index2.html'
]
stringify(parsePathArray(),null,“\t”) '';NB:需要合并生成的数组

此方法适用于文件和目录,并且仅使用数组作为数据格式

该结构基于作为文件夹的数组,第一个元素是文件夹名称,第二个元素是内容数组

文件只是数组中的常规字符串(但很容易成为包含属性的对象)

转换=>

[
  ['home', [
    ['user', [
      '.bashrc'
    ]]
  ]],
  ['var', [
    'test.conf',
    ['www', [
      'index.html',
      'index2.html'
    ]]
  ]]
]
var paths = [
  '/var/',
  '/var/test.conf',
  '/var/www/',
  '/var/www/index.html',
  '/var/www/index2.html'
]

var parsed = []

for (let path of paths) {
  let tree = path.split('/')
  let previous = parsed

  console.groupCollapsed(path)
  for (let item in tree) {
    const name = tree[item]
    const last = item == tree.length - 1

    if (name) {
      if (last) {
        console.log('File:', name)
        previous.push(name) - 1
      } else {
        console.log('Folder:', name)
        let i = previous.push([name, []]) - 1
        previous = previous[i][1]
      }  
    }
  }
  console.groupEnd(path)
}

console.warn(JSON.stringify(parsed))
至=>

[
  ['home', [
    ['user', [
      '.bashrc'
    ]]
  ]],
  ['var', [
    'test.conf',
    ['www', [
      'index.html',
      'index2.html'
    ]]
  ]]
]
var paths = [
  '/var/',
  '/var/test.conf',
  '/var/www/',
  '/var/www/index.html',
  '/var/www/index2.html'
]

var parsed = []

for (let path of paths) {
  let tree = path.split('/')
  let previous = parsed

  console.groupCollapsed(path)
  for (let item in tree) {
    const name = tree[item]
    const last = item == tree.length - 1

    if (name) {
      if (last) {
        console.log('File:', name)
        previous.push(name) - 1
      } else {
        console.log('Folder:', name)
        let i = previous.push([name, []]) - 1
        previous = previous[i][1]
      }  
    }
  }
  console.groupEnd(path)
}

console.warn(JSON.stringify(parsed))

脚本:


你能告诉我们你的尝试吗?