2016-06-02 20 views
1

ich versuche, eine dynamische JSON erstellen whith Daten aus meiner Datenbank zurückgegeben: Was ich haben will:dynamische JSON mit SQL-Ausgabe

var myJSON = { 
       "value" : [ { 
"icon_name": "value", 
"factor_name": "value", 
"number": "value", 
"priority": "value" 
}, 
{ 
"icon_name": "value", 
"factor_name": "value", 
"number": "value", 
"priority": "value" 
} ], 
        "value" : [ { 
"icon_name": "value", 
"factor_name": "value", 
"number": "value", 
"priority": "value" 
}, 
{ 
"icon_name": "value", 
"factor_name": "value", 
"number": "value", 
"priority": "value" 
} ], 
... 
    }; 

Jeden „Wert“ ist dynamisch und abhängig von meiner SQL-Antwort. Meine SQL Antwort sieht so aus.

[ RowDataPacket { 
    row_names: 587, 
    icon_name: 'small_event', 
    factor_name: 'Petit évènement', 
    number: 10, 
    priority: 1 }, 
    RowDataPacket { 
    row_names: 587, 
    icon_name: 'cold', 
    factor_name: 'Température basse', 
    number: 10, 
    priority: 7 }, 
    RowDataPacket { 
    row_names: 587, 
    icon_name: 'rain', 
    factor_name: 'Pluie', 
    number: 10, 
    priority: 12 }, 
    RowDataPacket { 
    row_names: 588, 
    icon_name: 'small_event', 
    factor_name: 'Petit évènement', 
    number: 10, 
    priority: 1 }, 
    RowDataPacket { 
    row_names: 588, 
    icon_name: 'cold', 
    factor_name: 'Température basse', 
    number: 10, 
    priority: 7 }] 

Es gibt mehrere Werte (icon_name, faktor_name, ...) für eine row_names. Ich möchte alle diese Werte für jede eindeutige row_names neu gruppieren.

Hier mein Code (Zeilen [3] ist meine SQL-Ausgabe):

var result = [] 
var r_names = ""; 
var j = 0; 
var id = ""; 

for(i = 0; i < rows[3].length; i++) { 
    if(r_names != rows[3][i].row_names) { 
    j = 0; 
    id = ''+rows[3][i].row_names; 
    result[id] = []; 

    r_names = rows[3][i].row_names 
    } 
    result[id].push({}); 
    result[id][j]["icon_name"] = rows[3][i].icon_name, 
    result[id][j]["factor_name"] = rows[3][i].factor_name, 
    result[id][j]["number"] = rows[3][i].number, 
    result[id][j]["priority"] = rows[3][i].priority 
    j++; 
} 

Hier mein Ergebnis:

... 
    , 
    , 
    , 
    , 
    , 
    , 
    , 
    , 
    , 
    , 
    , 
    [ { icon_name: 'small_event', 
     factor_name: 'Petit évènement', 
     number: 10, 
     priority: 1 }, 
    { icon_name: 'temperate', 
     factor_name: 'Température modéré', 
     number: 10, 
     priority: 7 }, 
    { icon_name: 'rain', 
     factor_name: 'Pluie', 
     number: 10, 
     priority: 12 } ], 
    , 
    , 
    , 
    , 
    , 
    , 
... 
    , 
    , 
    , 
    , 
    , 
    , 
    [ { icon_name: 'small_event', 
     factor_name: 'Petit évènement', 
     number: 10, 
     priority: 1 }, 
    { icon_name: 'temperate', 
     factor_name: 'Température modéré', 
     number: 10, 
     priority: 7 }, 
    { icon_name: 'rain', 
     factor_name: 'Pluie', 
     number: 10, 
     priority: 12 } ] ] 

Ich habe keine Ahnung, warum ich so viel haben ''. Es ist mir nicht gelungen, meinen Fehler zu finden. Haben Sie eine Idee?

Antwort

3

Das Problem ist, nehmen Sie den Wert row_names als Index für das Array und das ist am Anfang . Mit diesem Index generieren Sie ein Sparse-Array.

id = ''+rows[3][i].row_names; 
result[id] = []; 

Um dies zu verhindern, können Sie ein Objekt verwenden könnten, dann könnte man row_names ‚s-Wert als Schlüssel für das Ergebnis verwenden.

var result = {}; 
+0

In der Tat habe ich versucht, meine row_names als Zeichenfolge zu konvertieren, um Fehler zu vermeiden, aber es hat nicht funktioniert. Es tut mir leid, aber ich bin mir nicht sicher, ob ich deine Lösung vollständig verstehe. Wie kann ich hier ein Objekt verwenden? Es wird nichts ändern, nein? – onedkr

+0

ändere 'var result = [] 'in' var result = {} ' –

+1

-_- Vielen Dank es funktioniert :) – onedkr