gpt4 book ai didi

javascript - 遍历JSON对象创建jsTree

转载 作者:行者123 更新时间:2023-11-30 15:52:27 24 4
gpt4 key购买 nike

我想从具有不同深度(可以是 10 层或更多层)的 JSON 创建一个 jsTree。所以我在网上搜索并找到了一种创建jsTree的方法:遍历。

示例 JSON:

{
"testslave_1": {
"DevKey": "94ssfsafafeaw382",
"mapping": {
"device1": "D1",
"device2": "D2",
"device3": "D3"
}
}
}

幸运的是我有traverse-js但我有问题。

这是jsTree要求的语法:

$('#using_json_2').jstree({ 'core' : {
'data' : [
{ "id" : "ajson1", "parent" : "#", "text" : "Simple root node" },
{ "id" : "ajson2", "parent" : "#", "text" : "Root node 2" },
{ "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" },
{ "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" },
]
} });

到目前为止我已经试过了:

var obj = '{    "testslave_1": {        "DevKey": "94ssfsafafeaw382",       "mapping": {            "device1": "D1",            "device2": "D2",            "device3": "D3"     }   }}';

var obj = JSON.parse(obj);
var arr = [];

traverse(obj).map(function (x) {

var jsonTemp = '{ "id" : "'+this.path+'", "parent" : "'+this.parent+'", "text" : "'+this.node+'" }';
jsonTemp = JSON.parse(jsonTemp);
arr.push(jsonTemp);

});

console.dir(arr);

但是有几个问题:如何为每个项目创建一个特定的 ID? (该函数可能会记住父属性的 ID)

说的是object object,如果我理解正确的话我必须访问父对象的节点。但是怎么办? this.parent.node 不起作用。

缺少元素,应该在10件左右。

我的解决方案方向是否正确?

提前谢谢你。

最佳答案

我不知道 traverse-js。如果你想获得某种像示例中的树结构,你可以使用递归函数实现它,例如像这样:

var testobj = {
testslave_1:{
DevKey: "94ssfsafafeaw382",
mapping: {
device1:"D1",
device2:"D2",
device3:"D3"
}
}
};
var tree = {
core: {
data: []
}
};
function createTreeData(object, parent){
if(!parent){
parent = "#"
}
for(var prop in object){
if(object.hasOwnProperty(prop)){
var obj = {
id: prop,
parent: parent
};
if(typeof object[prop] === "object"){
createTreeData(object[prop], prop);
obj.text = "parent node";
}else{
obj.text = object[prop];
}
tree.core.data.push(obj);
}
}
}
createTreeData(testobj);
console.log(tree);

这个函数唯一没有提供的是元素的文本,这些元素本身就是父节点。相反,它放入了很可能是错误的子对象。但是您没有指定父节点应包含哪些文本。

编辑:我更改了函数,以便父节点现在包含文本“父节点”而不是它们的子对象。

EDIT2: 为纯文本属性创建节点的新函数:

function createTreeData(object, parent){
if(!parent){
parent = "#"
}
for(var prop in object){
if(object.hasOwnProperty(prop)){
tree.core.data.push({
id: prop,
parent: parent,
text: prop
});
if(typeof object[prop] === "object"){
createTreeData(object[prop], prop);
}else{
tree.core.data.push({
id: object[prop],
parent: prop,
text: object[prop]
});
}
}
}
}

关于javascript - 遍历JSON对象创建jsTree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39105749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com