1
我想從我的sql查詢中構建分層數據結構。 繼this post之後從平面對象中構建分層JSON對象後,我嘗試在對象層次中創建具有更多屬性的4級層次結構,但不需要子屬性。Node.js - 將平面json轉換爲沒有'parent','child'屬性的層次結構json
我怎樣才能做到這一點?
這裏是我的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;
我怎樣才能chect二路,3TH和第四級相同的情況?
這是平坦的對象,它一直努力:我目前的代碼
[
{
"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"
}
]
}
]
}
]
}
]
}
JSON應該在服務器中格式化併發送到客戶端。你正在嘗試的方法是一個不好的做法。 –
這個JSON格式在服務器端(使用NodeJS)和我將發送給客戶端的輸出。 – lgabster