javascript - 如何在 JavaScript 中将选项卡式树转换为 JSON?

标签 javascript jquery json algorithm tabs

我四处寻找答案,但我认为这是一个奇怪的问题。我将如何将其转换为使用制表符间距的文本文件:

parent
    child
    child
parent
    child
        grandchild
        grandhcild

{
"name" : "parent",
"children" : [
    {"name" : "child"},
    {"name" : "child"},
]
},
{
"name" : "parent",
"children" : [
    {
    "name" : "child",
    "children" : [
        {"name" : "grandchild"},
        {"name" : "grandchild"},
        {"name" : "grandchild"},
    ]
    },
]
}

JSON 可能并不完美,但希望能阐明我的观点。

最佳答案

我遇到了同样的问题。这是解决方案:

function node(title,lvl){
    var children = [],
        parent = null;
    return {
        title:title,
        children:children,
        lvl:()=>lvl==undefined?-1:lvl,
        parent:()=>parent, //as a function to prevent circular reference when parse to JSON
        setParent:p=>{parent=p},
        appendChildren: function(c){
            children.push(c); 
            c.setParent(this);
            return this
        },
    }
}
function append_rec(prev,curr) {
    if(typeof(curr)=='string'){ //in the recursive call it's a object
        curr = curr.split('    ');//or tab (\t)
        curr = node(curr.pop(),curr.length);
    }
    if(curr.lvl()>prev.lvl()){//curr is prev's child
        prev.appendChildren(curr);
    }else if(curr.lvl()<prev.lvl()){
        append_rec(prev.parent(),curr) //recursive call to find the right parent level
    }else{//curr is prev's sibling
        prev.parent().appendChildren(curr);
    }

    return curr;
}

root = node('root');

var txt = 
`parent
    child
    child
parent
    child
        grandchild
        grandhcild`;
        
txt.toString().split('\n').reduce(append_rec,root); 

console.log(JSON.stringify(root.children,null,3));

关于javascript - 如何在 JavaScript 中将选项卡式树转换为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031651/

相关文章:

javascript - 如何在不知道 key 的情况下获取JSON对象的第一个 key 对元素并在节点红色中将其删除

javascript - 使用服务跟踪用户状态并让 $watch() 工作?

javascript - 从 Kendo 中的 columns.filterable.cell.template 函数访问列字段名称

javascript - Jquery 事件冒泡复选框

jquery - 将 jQuery .draggable() 添加到 TinyMCE 图像

javascript - D3.json 设置缓存为 false

javascript - 使用 Jquery 隐藏按钮的文本而不更改文本

javascript - 移动版 Safari : iframed form "next-input" on dropdown bug

javascript - 按后退按钮时 Document.referrer 错误

java - 如何使用响应格式根据参数而变化的改造?