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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在JavaScript中将选项卡式树转换为JSON?相关的知识,希望对你有一定的参考价值。

我环顾四周寻找答案,但我认为这是一个奇怪的问题。我如何转换,作为使用间距选项卡的文本文件,这:

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可能并不完美,但希望我的观点清楚。

答案

我刚刚为tabdown标记语言实现了这个功能 - 它完全符合您的要求。 https://github.com/antyakushev/tabdown

用法非常简单:

var lines = data.toString().split('
');
var tree = tabdown.parse(lines);
console.log(tree.toString());

您还可以使用node.js之外的解析函数,它不依赖于任何模块。

另一答案

我有同样的问题。这是解决方案:

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 (	)
        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('
').reduce(append_rec,root); 

console.log(JSON.stringify(root.children,null,3));
另一答案

从选项卡树文本文件生成JSON

以下链接专门解决您的问题。您需要做的就是更新代码,以便根据您的要求格式化输出。


Tab分隔符到JSON

其他帮助

以上是关于如何在JavaScript中将选项卡式树转换为JSON?的主要内容,如果未能解决你的问题,请参考以下文章

如何在sails.js 或通常在服务器端JavaScript 中将图像转换为base64 编码的数据URL?

在 d3.js 中将节点和链接转换为分层树

在客户端 JavaScript 中将 WAV 转换为任何压缩音频格式

如何在 Rails 中将 Javascript 对象转换为 JSON?

如何在 JavaScript 中将时间戳转换为 MySQL DateTime?

将选项卡式文本转换为 Perl 数据格式