首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将路径数组转换为JSON结构?

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

Stack Overflow用户
提问于 2016-03-27 14:07:06
回答 2查看 5.4K关注 0票数 8

我发现了How to convert a file path into treeview?这个问题,但我不知道如何在JavaScript中获得预期的结果:

我试图将一系列路径转换为JSON树:

https://jsfiddle.net/tfkdagzv/16/

但我的道路被改写了。

我试着拿这样的东西:

代码语言:javascript
复制
[
    '/org/openbmc/path1', 
    '/org/openbmc/path2', 
    ...
]

..。把它变成..。

代码语言:javascript
复制
output = {
   org: {
     openbmc: {
       path1: {},
       path2: {}
     }
   }
}

我肯定这很容易,但我遗漏了一些东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-27 15:01:17

代码语言:javascript
复制
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"
];

const output = {};
let current;

for (const path of data) {
    current = output;

    for (const segment of path.split('/')) {
        if (segment !== '') {
            if (!(segment in current)) {
                current[segment] = {};
            }

            current = current[segment];
        }
    }
}

console.log(output);

您的解决方案已经接近,您只是没有正确地重置current变量。用这个:

代码语言:javascript
复制
current = output;

而不是这样:

代码语言:javascript
复制
current = output[path[0]];
票数 12
EN

Stack Overflow用户

发布于 2016-03-27 16:07:12

这一职能应用于:

代码语言:javascript
复制
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;
}

演示

代码语言:javascript
复制
var paths = [
    "/org/openbmc/UserManager/Group",
    "/org/stackExchange/StackOverflow",
    "/org/stackExchange/StackOverflow/Meta",
    "/org/stackExchange/Programmers",
    "/org/stackExchange/Philosophy",
    "/org/stackExchange/Religion/Christianity",
    "/org/openbmc/records/events",
    "/org/stackExchange/Religion/Hinduism",
    "/org/openbmc/HostServices",
    "/org/openbmc/UserManager/Users",
    "/org/openbmc/records/transactions",
    "/org/stackExchange/Religion/Islam",
    "/org/openbmc/UserManager/Groups",
    "/org/openbmc/NetworkManager/Interface"
];

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;
}

document.body.innerHTML = '<pre>' +
                          JSON.stringify(parsePathArray(), null, '\t')
                          '</pre>';

(另见this Fiddle)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36248245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档