如何将树转换为JSON对象?
问题描述:
我有这棵树,我想将它转换为JSON使用它在jquery option tree。如何将树转换为JSON对象?
NodeId, Title, Level
1, cars, 0
2, boats, 0
3, oldtimer, 1
4, trucks, 1
5, heavytrucks, 4
树应该是这样的:
boats
cars
- oldtimer
- trucks
-- heavytrucks
每个项目都有一个ID。
我该如何将其转换为JSON?
这个例子将在jQuery的选项树给出:
var option_tree = {
"Option 1": {
"Suboption": 200
},
"Option 2": {
"Suboption 2": {
"Subsub 1": 201,
"Subsub 2": 202
},
"Suboption 3": {
"Subsub 3": 203,
"Subsub 4": 204,
"Subsub 5": 205
}
}
};
但选项1不要有一个ID,它只有子元素。
也许有人可以帮忙。
答
这段代码将你的输入转换成树
var lines =
('1, cars, 0\n' +
'2, boats, 0\n' +
'3, oldtimer, 1\n' +
'4, trucks, 1\n' +
'5, heavytrucks, 4').split('\n');
var tree = [];
var lookup = {}; // temporary variable
for (var i in lines) {
var items = lines[i].split(', ');
var obj = { id: items[0], parent_id: items[2], name: items[1], children: [] };
lookup[obj.id] = obj;
if (lookup[obj.parent_id]) {
lookup[obj.parent_id].children.push(obj);
} else {
tree.push(obj);
}
}
console.log(tree); // will display your tree
然后你就可以穿越你的树,并修改它,你怎么想它的样子。
例如,这将打印
function walk(root, depth) {
var s = ""; for (var i = 0; i < depth; i++) s += '-';
console.log(s + ' ' + root.name);
for (var child in root.children) {
walk(root.children[child], depth+1);
}
}
for (var child in tree)
walk(tree[child], 1);
这样
- cars
-- oldtimer
-- trucks
--- heavytrucks
- boats
你同样可以将其转换成任何你想要的。
function walk2(root, parent) {
if (root.children.length == 0) {
parent[root.name] = root.id;
} else {
parent[root.name] = {}
for (var child in root.children) {
walk2(root.children[child], parent[root.name]);
}
}
}
var tree2 = {};
for (var child in tree)
walk2(tree[child], tree2);
console.log(tree2); // <- is this what you wanted?
+1
很好地完成了麦克。请注意:您的解决方案不允许未排序的输入。即,您不能将'0,东西,-1'作为输入中的最后一行。 – brianpeiris 2011-04-27 15:31:03
选项树附加到文本框。所以叶值被插入到文本框中,例如在选择'Option 1'>'Suboption'的例子中,文本框的值为'200'。在你的树(汽车,船...)中,叶子值缺失。 – neebz 2011-04-27 13:09:09
我不确定你想要转换成json的数据来自哪个数据来自你想转换成json的数据? – mcgrailm 2011-04-27 13:09:20
你想要转换为JSON?向我们展示你现在的“树”。 – 2011-04-27 13:39:55