我正在使用 Json 生成 TreeView,我使用的库是 bootstrap-treeview.js。
我收到的Json的结构如下:
data = [{
"Nivel": 0,
"NombrePuesto": "Coordinador"
}, {
"Nivel": 1,
"NombrePuesto": "Encargado"
}, {
"Nivel": 1,
"NombrePuesto": "Jefe"
}, {
"Nivel": 2,
"NombrePuesto": "Analista 1"
}, {
"Nivel": 2,
"NombrePuesto": "Analista 2"
}, {
"Nivel": 1,
"NombrePuesto": "Jefe de Controles"
}, {
"Nivel": 2,
"NombrePuesto": "Encargado 1"
}, {
"Nivel": 1,
"NombrePuesto": "Jefe de Supervision"
}, {
"Nivel": 2,
"NombrePuesto": "Tecnico 1"
}, {
"Nivel": 3,
"NombrePuesto": "Tecnico 2"
}, {
"Nivel": 4,
"NombrePuesto": "Tecnico 3"
}];
而且我必须根据帖子级别将json转换为:
var tree = [{
text: "Coordinador",
nodes: [{
text: "Encargado",
},
{
text: "Jefe",
nodes: [{
text: "Analista 1"
},
{
text: "Analista 2"
}
]
},
{
text: "Jefe de Controles",
nodes: [{
text: "Encargado 1"
}]
},
{
text: "Jefe de Supervision",
nodes: [{
text: "Tecnico 1"
},
{
text: "Tecnico 2"
},
{
text: "Tecnico 3"
}
]
}
]
}];
我尝试使用 $.each 来遍历 Json,但我无法生成正确的结构,因为我总是留下加号或减号。我读到可以通过 Json 并根据级别的类型推送到数组,但我做不到。
生成 json 的查询具有以下结构:
如果有人可以帮助我,非常感谢。
这是它应该是什么样子的示例,但我是手动填写的,而不是代码。
data = [{
"Nivel": 0,
"NombrePuesto": "Coordinador"
}, {
"Nivel": 1,
"NombrePuesto": "Encargado"
}, {
"Nivel": 1,
"NombrePuesto": "Jefe"
}, {
"Nivel": 2,
"NombrePuesto": "Analista 1"
}, {
"Nivel": 2,
"NombrePuesto": "Analista 2"
}, {
"Nivel": 1,
"NombrePuesto": "Jefe de Controles"
}, {
"Nivel": 2,
"NombrePuesto": "Encargado 1"
}, {
"Nivel": 1,
"NombrePuesto": "Jefe de Supervision"
}, {
"Nivel": 2,
"NombrePuesto": "Tecnico 1"
}, {
"Nivel": 3,
"NombrePuesto": "Tecnico 2"
}, {
"Nivel": 4,
"NombrePuesto": "Tecnico 3"
}];
var tree = [{
text: "Coordinador",
nodes: [{
text: "Encargado",
},
{
text: "Jefe",
nodes: [{
text: "Analista 1"
},
{
text: "Analista 2"
}
]
},
{
text: "Jefe de Controles",
nodes: [{
text: "Encargado 1"
}]
},
{
text: "Jefe de Supervision",
nodes: [{
text: "Tecnico 1"
},
{
text: "Tecnico 2"
},
{
text: "Tecnico 3"
}
]
}
]
}];
/*var tree = '';
$.each(data, function(i, item) {
//console.log(item.Nivel, item.NombrePuesto);
if (item.Nivel == 0) {
tree += '[{text: "' + item.NombrePuesto + '"';
}
if (item.Nivel == 1) {
tree += ', nodes: [{text: "' + item.NombrePuesto + '"}';
}
if (item.Nivel >= 2) {
tree += ',{text: "' + item.NombrePuesto + '"}';
}
});
*/
function cargarTreeView() {
$.each(data, function(i, item) {
});
var $TreeV = $('#treeview').treeview({
data: tree
});
}
$(document).ready(function() {
cargarTreeView();
});
<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
<script src="https://rawgit.com/jonmiles/bootstrap-treeview/master/public/js/bootstrap-treeview.js" type="text/javascript"></script>
<link rel="stylesheet" href="https://rawgit.com/jonmiles/bootstrap-treeview/master/public/css/bootstrap-treeview.css" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://rawgit.com/jonmiles/bootstrap-treeview/master/public/css/bootstrap-treeview.css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" type="text/javascript"></script>
<div class="col-sm-4">
<div id="treeview" class="treeview">
</div>
</div>
我已经给了它几圈,我已经设法生成
treeview
:我必须进行一些更改,例如引号
text
和nodos
,看看下一个节点是什么来知道要生成什么以及JSON.parse(tree)
将生成的字符串转换为对象的节点。如果有更多用例(并且您可以优化它),您将不得不对其进行润色,但作为最初的想法,我认为它可以为您工作。它一点也不短,但这是转换,使用您留下的相同示例。