2016-04-08 1 views
2

Schalter meine Variable chart Hexe enthält dieses JSON:Json to google Diagramme mit variabler Anzahl von Spalten und Array

[{ 
    "month": "January", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}, { 
    "month": "February", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}, { 
    "month": "March", 
    "values": [35, 3, 8, 18, 0, 0, 0, 0, 0] 
}, { 
    "month": "April", 
    "values": [36, 1, 0, 2, 0, 0, 0, 0, 0] 
}, { 
    "month": "May", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}, { 
    "month": "June", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}, { 
    "month": "July", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}, { 
    "month": "August", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}, { 
    "month": "September", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}, { 
    "month": "October", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}, { 
    "month": "November", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}, { 
    "month": "December", 
    "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
}] 

Die „Werte“ Attribut nicht statisch ist, hängt es von der Anzahl der Techniker, die sind in meiner Datenbank.

Meine Spalten werden wie folgt initialisiert:

var data = new google.visualization.DataTable(); 
data.addColumn('string', 'Month'); 
var techlist = @Html.Raw(Json.Encode(ViewBag.techs)); 
for(var j=0; j<@ViewBag.nbTechs;j++){ 
    data.addColumn('number', techlist[j]); 
} 

Also meine Frage ist: Wie kann ich das Attribut „Monat“ in der Monats Spalte und alle Werte in „Werte“ in den Spalten habe ich erstellt (in der Reihenfolge der "Werte" und der Reihenfolge der Erstellung der Zahlenspalte)?

Vielen Dank im Voraus für Ihre Hilfe!

+0

@WhiteHat erste tech in ersten Wert in jedem [Wert], zweiter tech ist zweiter Wert von jeweils [Werten] etc .. Und der JSON wird erstellt, um genau mit der Anzahl der Spalten zu passen! Alles, was ich wissen muss, ist, wie man den "Monat" in die erste Spalte und den ersten Wert in die erste [Werte] in der zweiten Spalte, den zweiten Wert in die erste [Werte] in der dritten Spalte, ... für jeden Monat setzt. – MrPixel6

Antwort

1

So etwas sollte funktionieren ...

google.charts.load('current', { 
 
    callback: drawTable, 
 
    packages: ['table'] 
 
}); 
 

 
function drawTable() { 
 
    var jsonData = 
 
    [{ 
 
     "month": "January", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "February", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "March", 
 
     "values": [35, 3, 8, 18, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "April", 
 
     "values": [36, 1, 0, 2, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "May", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "June", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "July", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "August", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "September", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "October", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "November", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }, { 
 
     "month": "December", 
 
     "values": [0, 0, 0, 0, 0, 0, 0, 0, 0] 
 
    }]; 
 

 

 

 
    var data = new google.visualization.DataTable(); 
 
    data.addColumn('string', 'Month'); 
 
    //var techlist = @Html.Raw(Json.Encode(ViewBag.techs)); 
 
    for(var j=0; j<jsonData[0].values.length;j++){ 
 
    data.addColumn('number', 'col' + j); 
 
    } 
 

 
    jsonData.forEach(function(row, index) { 
 
    var currentDate = new Date(); 
 
    var rowData = []; 
 
    rowData.push(row.month); 
 
    if (currentDate.getMonth() >= index) { 
 
     rowData = rowData.concat(row.values); 
 
    } else { 
 
     row.values.forEach(function() { 
 
     rowData.push(null); 
 
     }); 
 
    } 
 
    data.addRow(rowData); 
 
    }); 
 

 
    var visualization = new google.visualization.Table(document.getElementById('table')); 
 
    visualization.draw(data, {}); 
 
}
<script src="https://www.gstatic.com/charts/loader.js"></script> 
 
<div id="table"></div>

+0

Genau das, was ich wollte ! Vielen Dank ! Kann ich Ihnen bitte noch eine Frage stellen? :) Ich möchte _null_ alle Null-Werte machen, die im Monat nach dem aktuellen Monat sind (also grundsätzlich wenn ich zum Beispiel die aktuelle Zeit nehme, möchte ich _null_ alle Werte nach April machen). Ist das möglich ? Danke für die vorherige Antwort! – MrPixel6

+0

kein Problem, siehe bearbeiten, Prost! – WhiteHat

+0

Funktioniert gut! Vielen Dank! – MrPixel6

Verwandte Themen