2012-04-12 11 views
0

Ich habe eine riesige JSON-Datei. Es ist nicht in der richtigen Struktur und ich habe keine Kontrolle über die Struktur. Es sind Daten, die von einer Gruppe von Routern stammen, die auf dem Zeitstempel basieren. Ich versuche, eine Objektstruktur zu erstellen, die alle Informationen für einen bestimmten Router zu einem Router-Objekt mit Zeitstempel usw. als Arrays kombiniert. @quodlibetor war eine große Hilfe, um mich dazu zu bringen. Ich möchte auch automatisch die Eigenschaften des Objekts aus dem Namen des Namens val Paare im JSON nennen.JSON in ein Objekt mit einer anderen Struktur automatisch manipulieren

Mein Ziel ist es, die Eigenschaften aus den Namen in der JSON-Datei automatisch zu benennen und sie in ein Objekt zu strukturieren, das so aussieht (Ich bin offen für Vorschläge zur Struktur, die das am besten organisiert schien) .

Das ist die Struktur Ich möchte:

{ 
     "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" 
       ] 
      } 
     ] 
    } 

Obwohl versucht, diese Struktur zu schaffen, ich bin nah dran, aber kein Deal:

{ 
    "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" 
      } 
     ] 
    } 
} 

ORIGINAL 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" 
     } 
     ]; 

CODE:

// 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> 
+0

Was ist die JSON Sie am Anfang haben? –

+0

Ich habe meine Antwort bearbeitet –

+0

[{ist, was am Anfang ist. Es ist alles da oben. Ich überprüfe deine Antwort unten. – rd42

Antwort

2

Hier ist der Code, den Sie benötigen:

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); 
+0

Danke für Ihre Antwort. Wahrscheinlich liegt es daran, dass Sie nicht das Original-JSON hatten (es ist jetzt da oben), aber es wirft und Fehler: Router ['Name'] = Router; Uncaught ReferenceError: Router ist nicht definiert – rd42

+0

Entschuldigung, ich war weg vom Computer, ich werde es jetzt programmieren. –

+0

@ rd42 jetzt sollte es tun, was Sie tun wollen. –

Verwandte Themen