[英]Manipulate json into an object with a different structure automatically
我有一個巨大的JSON文件。 它沒有正確的結構,我無法控制結構。 它是來自一組基於時間戳的路由器的數據。 我正在嘗試創建一個對象結構,它將給定路由器的所有信息組合成一個帶時間戳等的路由器對象作為數組。 @quodlibetor是一個很大的幫助讓我接近這一點。 我還想從json中名稱val對的名稱自動命名對象的屬性。
我的目標是從json文件中的名稱自動命名屬性,並將其重組為一個看起來像這樣的對象(我對結構的建議是開放的,這似乎是最有組織的方式)。
這是我想要的結構:
{
"Router": [
{
"routerName": "RouterID1",
"TimeStamp": [
"2012/01/01 06:00:00",
"2013/01/01 06:00:00",
"2014/01/01 06:00:00"
],
"OutputBITS": [
"23235",
"29903",
"22103"
],
"InputBITS": [
"23235",
"29903",
"22103"
]
}
]
}
雖然嘗試創建該結構,但我已經接近但沒有交易:
{
"RouterID1": {
"timeStamp": [
{
"timeStamp": "2012/01/01 06:00:00"
},
{
"timeStamp": "2013/01/01 06:00:00"
},
{
"timeStamp": "2014/01/01 06:00:00"
}
],
"OutputBITS": [
{
"OutputBITS": "23235"
},
{
"OutputBITS": "23235"
},
{
"OutputBITS": "23235"
}
],
"InputBITS": [
{
"InputBITS": "29903"
},
{
"InputBITS": "29903"
},
{
"InputBITS": "29903"
}
]
}
}
原始JSON:
json = [
{
"Router": "RouterID1",
"TimeStamp": "2012/01/01 06:00:00",
"OutputBITS": "23235",
"InputBITS": "29903"
},
{
"Router": "RouterID1",
"TimeStamp": "2013/01/01 06:00:00",
"OutputBITS": "23235",
"InputBITS": "29903"
},
{
"Router": "RouterID1",
"TimeStamp": "2014/01/01 06:00:00",
"OutputBITS": "23235",
"InputBITS": "29903"
},
{
"Router": "RouterID3",
"TimeStamp": "2012/01/01 06:05:00",
"OutputBITS": "21235",
"InputBITS": "22103"
},
{
"Router": "RouterID3",
"TimeStamp": "2012/01/01 06:05:00",
"OutputBITS": "21235",
"InputBITS": "22103"
},
{
"Router": "RouterID4",
"TimeStamp": "2012/01/01 06:05:00",
"OutputBITS": "21235",
"InputBITS": "22103"
},
{
"Router": "RouterID4",
"TimeStamp": "2012/01/01 06:05:00",
"OutputBITS": "21235",
"InputBITS": "22103"
}
];
碼:
// Create routers object
var routers = {};
for (var i=0;i<json.length;i++){
var router_name = json[i].Router;
router_name = (router_name.replace(/-/g, "")); //take hyphen out or router name
if (!routers[router_name]){
// add properties to the router object thanks to @@quodlibetor
// instead of using timeStamp is something like json[i] or json.[name] or some
// way to reference each json property and not have to type it in?
routers[router_name] = { timeStamp : [], OutputBITS : [], InputBITS : [] };
}
routers[router_name].timeStamp.push({
timeStamp : json[i].TimeStamp
});
routers[router_name].OutputBITS.push({
OutputBITS : json[i].OutputBITS
});
routers[router_name].InputBITS.push({
InputBITS : json[i].InputBITS
});
};
console.log(routers);
});
</script>
這是您需要的代碼:
var router = {router: []}, i, j, k, l, inArray, routerName, thisRouter;
for(i=0,j=json.length;i<j;++i) {
inArray = false;
routerName = json[i].Router;
for(k=0,l=router.router.length;k<l;++k) {
if(router.router[k].name === routerName) {
inArray = true; --k; l = k;
}
}
if(inArray === true) {
router.router[k].TimeStamp.push(json[i].TimeStamp);
router.router[k].OutputBITS.push(json[i].OutputBITS);
router.router[k].InputBITS.push(json[i].InputBITS);
} else {
thisRouter = {name: routerName, TimeStamp: [json[i].TimeStamp], OutputBITS: [json[i].OutputBITS], InputBITS: [json[i].InputBITS]};
router.router.push(thisRouter);
}
}
console.log(router);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.