2017-03-03 2 views
0

ich ein JSON-Objekt erstellen möchten, die endgültige Struktur wie folgt aussehen sollte:Push-Daten in ein komplexes JSON-Objekt

crossdata = { 
    "reports" : { 
        {"name" : "emp1", "age" : "20", "height" : "180"}, 
        {"name" : "emp2", "age" : "33", "height" : "185"}, 
        {"name" : "emp3", "age" : "31", "height" : "176"} 
        {"name" : "emp4", "age" : "42", "height" : "188"} 
       }, 
    "process" : { 
        {"time" : "260", "opt" : "1", "area" : "north", "active" : "1"}, 
        {"time" : "123", "opt" : "0", "area" : "north", "active" : "1"}, 
       }, 
    "status" : { 
        {"actual" : "1", "sync" : "1"}, 
        {"actual" : "1", "sync" : "0"}, 
        {"actual" : "0", "sync" : "0"}, 
       } 
     } 

Wie Sie sehen können, werden die drei Objekte (oder sind sie Arrays?) Innerhalb crossdata kann eine unterschiedliche Anzahl von "Datensätzen" haben, wobei Daten von IndexedDB gesammelt werden.

Also, an der Spitze der Linie I erklärte:

crossdata = { "reports" : {}, "process" : {}, "status" : {} }; 

Und dann habe ich versucht, die Daten aus der DB innerhalb wiederkehrenden Schleifen gesammelt zu schieben:

 //some DB code (reports table) // (function(r){ 
     for (i=0; i<r.length; i++){ 
      crossdata.reports.push ({ 
      "name" : r[i].name, "age" : r[i].age, "height" : r[i].height 
      }); 
     } 
     }); 
     //some DB code (process table) // (function(r){ 
     for (i=0; i<r.length; i++){ 
      crossdata.process.push ({ 
      "time" : r[i].time, "opt" : r[i].opt, "area" : r[i].area, "active" : r[i].active 
      }); 
     } 
     }); 
     //some DB code (status table) // (function(r){ 
     for (i=0; i<r.length; i++){ 
      crossdata.status.push ({ 
      "actual" : r[i].actual, "sync" : r[i].sync 
      }); 
     } 
     }); 

Aber es funktioniert nicht Ich erhalte weiterhin einen Fehler, der anzeigt, dass crossdata.reports.push keine Funktion ist. Ich denke, es hat etwas mit Arrays vs. Objekten, eckigen Klammern und Parsing zu tun, aber die Anwendung von Lösungen aus ähnlichen Diskussionen funktionierte nicht für mich.

Irgendeine Idee darüber, wie man diese Art von Struktur erreicht?

Danke!

Antwort

0

Verwenden

crossdata = { "reports" : [], "process" : [], "status" : [] }; 

Arrays zu deklarieren. Sie haben Objekte dort deklariert, die keine native Methode push() haben.

{} ist ein Objektliteral, während [] ein Array-Literal ist. Wenn Sie Array-Funktionen wie push() verwenden möchten, müssen Sie natürlich Arrays deklarieren.