怎么把一个深度json里面的一个key转换成几个深度呢?
How to convert one depth json to several depth by a key in it?
我从服务器得到了一个 JSON 数组,但它的格式不正确,比如
[
{
"id": 2,
"parentId": 1,
},
{
"id": 3,
"parentId": 2,
}
]
当然,数组的第 2 项应该是第 1 项的子项,因为它的键 "parentId",比如
[
{
"id": 2,
"parentId": 1,
"children": [
{
"id": 3,
"parentId": 2,
}
]
}
]
如何将 JSON 的第一种形式转换为第二种形式?
此解决方案创建了一棵树,并将给定的 parentId
作为树的根。
工作原理:
Basically, for every object in the array, it takes the id
for building a new object as well as the parentId
for the same object.
示例:
{ "id": 6, "parentId": 4 }
首先生成 id
"6": {
"id": 6,
"parentId": 4
}
然后这个结构 parentId
:
"4": {
"children": [
{
"id": 6,
"parentId": 4
}
]
},
虽然所有对象都这样处理,但我们最终得到了一棵树。
如果parentId === root
找到根节点。这是后面return.
的对象
var data = [{ "id": 1, "parentId": 0 }, { "id": 6, "parentId": 4 }, { "id": 4, "parentId": 1 }],
tree = function (data, root) {
var r, o = {};
data.forEach(function (a) {
a.children = o[a.id] && o[a.id].children;
o[a.id] = a;
if (a.parentId === root) {
r = a;
} else {
o[a.parentId] = o[a.parentId] || {};
o[a.parentId].children = o[a.parentId].children || [];
o[a.parentId].children.push(a);
}
});
return r;
}(data, 0);
document.write('<pre>' + JSON.stringify(tree, 0, 4) + '</pre>');
我从服务器得到了一个 JSON 数组,但它的格式不正确,比如
[
{
"id": 2,
"parentId": 1,
},
{
"id": 3,
"parentId": 2,
}
]
当然,数组的第 2 项应该是第 1 项的子项,因为它的键 "parentId",比如
[
{
"id": 2,
"parentId": 1,
"children": [
{
"id": 3,
"parentId": 2,
}
]
}
]
如何将 JSON 的第一种形式转换为第二种形式?
此解决方案创建了一棵树,并将给定的 parentId
作为树的根。
工作原理:
Basically, for every object in the array, it takes the
id
for building a new object as well as theparentId
for the same object.
示例:
{ "id": 6, "parentId": 4 }
首先生成 id
"6": {
"id": 6,
"parentId": 4
}
然后这个结构 parentId
:
"4": {
"children": [
{
"id": 6,
"parentId": 4
}
]
},
虽然所有对象都这样处理,但我们最终得到了一棵树。
如果parentId === root
找到根节点。这是后面return.
var data = [{ "id": 1, "parentId": 0 }, { "id": 6, "parentId": 4 }, { "id": 4, "parentId": 1 }],
tree = function (data, root) {
var r, o = {};
data.forEach(function (a) {
a.children = o[a.id] && o[a.id].children;
o[a.id] = a;
if (a.parentId === root) {
r = a;
} else {
o[a.parentId] = o[a.parentId] || {};
o[a.parentId].children = o[a.parentId].children || [];
o[a.parentId].children.push(a);
}
});
return r;
}(data, 0);
document.write('<pre>' + JSON.stringify(tree, 0, 4) + '</pre>');