考虑像这样的json对象
var data = {
keyA: [ {keyA0: [keyA00]} ],
keyB: [ {keyB0: [keyB00]} ]
}
更具视觉冲击力
-keyA
- keyA0
- keyA00
-keyB
- keyB0
- keyB00
需要将其转换为类似的东西
var convertedData = {
name: root
children:[
{name:keyA, children: [ {name: keyA0 : children: [{name:keyA0, children: []}]} ]},
{name:keyB, children: [...]}
]
}
“...”是递归结构,直到它命中一个叶子节点,其中子节点是一个空数组。
答案 0 :(得分:0)
解决了它,也许它会成为有类似问题的其他人使用。这是js小提琴,http://jsfiddle.net/tF3uH/20/,以供进一步参考代码
var data = {
"KeyA": ["KeyA0", "KeyA1"],
"KeyB": [{"KeyB0": ["KeyB00", "KeyB01"]}]
};
/* EXPECTED OUTPUT
[
{name: KeyA: children:[{name:KeyA0, children:[]},
{name:keyA1, children:[]}
]
},
{name: KeyB: children:[{name:KeyB0, children: [{name:KeyB00, children: []},
{name:KeyB01, children: []}
]
}
]
}
]
*/
function _doConversion(jsonData, treeList) {
if (typeof jsonData == typeof Object()) {
$.each(jsonData, function(key, val) {
var isArray = Array.isArray(val);
var name = key;
var children = [];
if (isArray) {
$.each(val, function(i, item) {
_doConversion(item, children);
});
}else{ //not array but object
_doConversion(val,children);
}
treeList.push({
name : name ,
children: children
});
});
} else { //a leaf (could be string,number,boolean...)
var node = {
name: jsonData,
children: []
};
treeList.push(node);
}
}
var list = [];
_doConversion(data, list);
$("body").text(JSON.stringify(list, null, "\n"));