如何在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
以下链接专门解决您的问题。您需要做的就是更新代码,以便根据您的要求格式化输出。
- Python file parsing: Build tree from text file
- Creating a tree/deeply nested dict from an indented text file in python
- Parse Tree - 用于解析选项卡树的Ruby示例。在FreeNode上为#ruby创建。
Tab分隔符到JSON
- Converting Tab Delimited Textfile to JSON - 您可以适应的Python解决方案。
- Convert CSV To JSON - 在线转换器有很多选项。
- Mr. Data Converter - 不是一个确切的解决方案,但你可以调整代码(fork on GitHub)。
其他帮助
以上是关于如何在JavaScript中将选项卡式树转换为JSON?的主要内容,如果未能解决你的问题,请参考以下文章
如何在sails.js 或通常在服务器端JavaScript 中将图像转换为base64 编码的数据URL?
在客户端 JavaScript 中将 WAV 转换为任何压缩音频格式
如何在 Rails 中将 Javascript 对象转换为 JSON?