Node.js – 将平面json转换为没有“parent”,“child”属性的层级json

我想从我的SQL查询构build一个分层的数据结构。 在接下来的这个post中,我从平面对象中构build分层的JSON对象,然后尝试在对象层次上创build4个层次更多的属性,但不需要子属性。

我怎样才能做到这一点?

这是我的JavaScript(NodeJS)代码:

var levels = ["counties_id","district_id", "municipalities_id", "institutes_id"]; data.forEach(function(d){ var depthCursor = newData.counties; levels.forEach(function( property, depth ){ var index; depthCursor.forEach(function(child,i){ if ( d[property] == child.counties_id ) index = i; }); if ( isNaN(index) ) { var propname = levels[depth]; var obj = {}; obj[propname] = d[property]; obj["children"] = []; depthCursor.push(obj); index = depthCursor.length - 1; } depthCursor = depthCursor[index].children; if ( depth === levels.length - 1 ) { depthCursor.push({ id : d.id, name : d.name, name_H : d.name_h }); } }); }); 

第一级是好的,因为这个equalation检查相同的第一级属性:

 if ( d[property] == child.counties_id ) index = i; 

我怎样才能把第二,第三和第四级的情况一样呢?

这是继续尝试的扁平物体:

 [ { "counties_h":"Megye 1", "counties_en":"Coun 1", "counties_id":"1", "district_h":"Korz 1", "district_en":"Dist 1", "district_id":"101", "municipalities_h":"Onk 1", "municipalities_en":"Mun 1", "municipalities_id":"asdf", "institutes_h":"Int 1", "institites_en":"Inst 1", "institutes_id":"1" }, { "counties_h":"Megye 1", "counties_en":"Coun 1", "counties_id":"1", "district_h":"Korz 1", "district_en":"Dist 1", "district_id":"101", "municipalities_h":"Onk 1", "municipalities_en":"Mun 1", "municipalities_id":"asdf", "institutes_h":"Int 2", "institites_en":"Inst 2", "institutes_id":"2" }, { "counties_h":"Megye 1", "counties_en":"Coun 1", "counties_id":"1", "district_h":"Korz 1", "district_en":"Dist 1", "district_id":"101", "municipalities_h":"Onk 2", "municipalities_en":"Mun 2", "municipalities_id":"sdfg", "institutes_h":"Int 1", "institites_en":"Inst 1", "institutes_id":"1" }, { "counties_h":"Megye 1", "counties_en":"Coun 1", "counties_id":"1", "district_h":"Korz 1", "district_en":"Dist 1", "district_id":"101", "municipalities_h":"Onk 2", "municipalities_en":"Mun 2", "municipalities_id":"sdfg", "institutes_h":"Int 2", "institites_en":"Inst 2", "institutes_id":"2" }, { "counties_h":"Megye 1", "counties_en":"Coun 1", "counties_id":"1", "district_h":"Korz 2", "district_en":"Dist 2", "district_id":"102", "municipalities_h":"Onk 1", "municipalities_en":"Mun 1", "municipalities_id":"dfgh", "institutes_h":"Int 1", "institites_en":"Inst 1", "institutes_id":"1" }, { "counties_h":"Megye 1", "counties_en":"Coun 1", "counties_id":"1", "district_h":"Korz 2", "district_en":"Dist 2", "district_id":"102", "municipalities_h":"Onk 1", "municipalities_en":"Mun 1", "municipalities_id":"dfgh", "institutes_h":"Int 2", "institites_en":"Inst 2", "institutes_id":"2" }, { "counties_h":"Megye 2", "counties_en":"Coun 2", "counties_id":"2", "district_h":"Korz 2", "district_en":"Dist 2", "district_id":"202", "municipalities_h":"Onk 1", "municipalities_en":"Mun 1", "municipalities_id":"fghj", "institutes_h":"Int 1", "institites_en":"Inst 1", "institutes_id":"1" }, { "counties_h":"Megye 2", "counties_en":"Coun 2", "counties_id":"2", "district_h":"Korz 2", "district_en":"Dist 2", "district_id":"202", "municipalities_h":"Onk 1", "municipalities_en":"Mun 1", "municipalities_id":"fghj", "institutes_h":"Int 2", "institites_en":"Inst 2", "institutes_id":"2" } ] 

我当前代码的输出:

 { "counties":[ { "counties_id":"1", "children":[ { "district_id":"101", "children":[ { "municipalities_id":"asdf", "children":[ { "institutes_id":"1", "children":[ { } ] } ] } ] }, { "district_id":"101", "children":[ { "municipalities_id":"asdf", "children":[ { "institutes_id":"2", "children":[ { } ] } ] } ] }, { "district_id":"101", "children":[ { "municipalities_id":"sdfg", "children":[ { "institutes_id":"1", "children":[ { } ] } ] } ] }, { "district_id":"101", "children":[ { "municipalities_id":"sdfg", "children":[ { "institutes_id":"2", "children":[ { } ] } ] } ] }, { "district_id":"102", "children":[ { "municipalities_id":"dfgh", "children":[ { "institutes_id":"1", "children":[ { } ] } ] } ] }, { "district_id":"102", "children":[ { "municipalities_id":"dfgh", "children":[ { "institutes_id":"2", "children":[ { } ] } ] } ] } ] }, { "counties_id":"2", "children":[ { "district_id":"202", "children":[ { "municipalities_id":"fghj", "children":[ { "institutes_id":"1", "children":[ { } ] } ] } ] }, { "district_id":"202", "children":[ { "municipalities_id":"fghj", "children":[ { "institutes_id":"2", "children":[ { } ] } ] } ] } ] } ] } 

这就是我想要的:

 { "counties":[ { "counties_id":"1", "counties_h":"Megye 1", "counties_en":"Coun 1", "districts":[ { "district_id":"101", "district_h":"Korz 1", "district_en":"Dist 1", "municipalities":[ { "municipalities_id":"asdf", "municipalities_h":"Onk 1", "municipalities_en":"Mun 1", "institutes":[ { "institutes_id":"1", "institutes_h":"Int 1", "institutes_en":"Inst 1" }, { "institutes_id":"2", "institutes_h":"Int 2", "institutes_en":"Inst 2" } ] }, { "municipalities_id":"sdfg", "municipalities_h":"Onk 2", "municipalities_en":"Mun 2", "institutes":[ { "institutes_id":"3", "institutes_h":"Int 1", "institutes_en":"Inst 1" }, { "institutes_id":"4", "institutes_h":"Int 2", "institutes_en":"Inst 2" } ] } ] }, { "district_id":"102", "district_h":"Korz 2", "district_en":"Dist 2", "municipalities":[ { "municipalities_id":"dfgh", "municipalities_h":"Onk 1", "municipalities_en":"Mun 1", "institutes":[ { "institutes_id":"5", "institutes_h":"Int 1", "institutes_en":"Inst 1" }, { "institutes_id":"6", "institutes_h":"Int 2", "institutes_en":"Inst 2" } ] } ] } ] }, { "counties_id":"2", "counties_h":"Megye 2", "counties_en":"Coun 2", "districts":[ { "district_id":"202", "district_h":"Korz 2", "district_en":"Dist 2", "municipalities":[ { "municipalities_id":"fghj", "municipalities_h":"Onk 1", "municipalities_en":"Mun 1", "institutes":[ { "institutes_id":"7", "institutes_h":"Int 1", "institutes_en":"Inst 1" }, { "institutes_id":"8", "institutes_h":"Int 2", "institutes_en":"Inst 2" } ] } ] } ] } ] } 

查看NPM上的shape-json模块 。

它会让你的生活变得更简单。

Interesting Posts