2016-07-09 12 views
1

Ich versuche, Diagrammdarstellung in eckigen js zu implementieren.Charts in Angular js mit JSON-Objekt

http://jtblin.github.io/angular-chart.js/

Ich war in der Lage einfachen Diagramme zu implementieren, aber ich habe ein unten-Daten dargestellt werden. Es ist im JSON-Format. Ich brauche Hilfe, wie man JSON in Arrays umwandelt, die als Diagramme dargestellt werden. Im Folgenden finden Sie JSON

[{"value": {"DE":2,"NP":20,"BD":28,"TW":1}, 
    "end_time":"2016-07-05T07:00:00+0000"}, 
{"value":{"DE":5,"NP":11,"BD":22,"BE":2,"FJ":2}, 
    "end_time":"2016-07-06T07:00:00+0000"}, 
{"value":{"DE":5,"NP":24,"BD":29}, 
    "end_time":"2016-07-07T07:00:00+0000"}] 

ich es in das Format

$scope.labels = ["January", "February", "March", "April", "May", "June","July"]; 
$scope.series = ['Series A', 'Series B']; 
$scope.data = [ 
[65, 59, 80, 81, 56, 55, 40], 
[28, 48, 40, 19, 86, 27, 90] 
]; 

Ich verstehe zu konvertieren Ich versuche, dass ich über meine JSON-Objekt durchlaufen müssen und Arrays erstellen.

Meine Frage ist, ich habe unterschiedliche Etiketten in jedem der JSON-Objekt. Wie konvertiere ich es ein Array mit allen Etiketten in jedem der Wert zu schaffen und noch die Reihenfolge der counts.Like unter

$scope.labels = ["DE", "NP", "BD", "TW", "BE", "FJ"]; 
$scope.series = ["2016-07-05T07:00:00+0000","2016-07-06T07:00:00+0000","2016-07-07T07:00:00+0000"] 
$scope.data = [ [2,20,28,1,0,0], 
       [5,11,22,0,2,2], 
       [5,24,29] 
       ] 

halten Wenn dies besser erreicht werden können verschiedene Bibliotheken oder Diagramme in AngularJS verwenden Sie schlagen

+0

Also, was ist das Problem? Sollte mit Hilfe von Array.prototype.forEach, Object.keys + forEach nicht sehr schwierig sein. – dfsq

+0

Das Problem ist, dass Werte in Beschriftungen für jedes Element im Array unterschiedlich sind. Wie im ersten Fall gibt es kein BE- und FJ-Label. Ich bin auch sehr neu in JavaScript. – user2934433

Antwort

2

Haben Sie sogar etwas versucht? Du hast keine Lösung gezeigt. Wie auch immer, hier ist eine mögliche Implementierung

var source = [ 
 
    {"value": {"DE":2,"NP":20,"BD":28,"TW":1}, 
 
    "end_time":"2016-07-05T07:00:00+0000"}, 
 
    {"value":{"DE":5,"NP":11,"BD":22,"BE":2,"FJ":2}, 
 
    "end_time":"2016-07-06T07:00:00+0000"}, 
 
    {"value":{"DE":5,"NP":24,"BD":29}, 
 
    "end_time":"2016-07-07T07:00:00+0000"} 
 
] 
 
var $scope = {}; 
 
$scope.labels = []; 
 
$scope.data = []; 
 
$scope.series = []; 
 

 

 
source.forEach(function(item){ 
 
    $scope.series.push(item.end_time) 
 

 
    var values = [] 
 
    Object.keys(item.value).forEach(function(key) { 
 
    if ($scope.labels.indexOf(key) === -1) { 
 
    $scope.labels.push(key) 
 
    } 
 
    values.push(item.value[key]) 
 
    }) 
 
    $scope.data.push(values) 
 
}) 
 
console.log($scope)

+0

Ich habe definitiv keinen so kompakten Code geschrieben, aber für Etiketten, die nicht vorhanden sind, muss ich den Wert 0 haben, was mein grundlegendes Problem war. Kannst du mir dabei helfen? Danke für die Antwort. Ich denke, ich muss eine globale Liste mit allen Etiketten erstellen und dann iterieren. Wenn der Schlüssel nicht vorhanden ist, drücken Sie Null. – user2934433

+0

Ja, genau. Verwenden Sie einfach indexOf, um zu überprüfen, ob nicht in der Liste. Prost – Ladmerc