2017-10-12 7 views
0

[{"SUM_PTS": {"Datentyp": "INTEGER", "Länge": "8", "Wert": "29903727", "verschleiert": "false"}, "SUM_TOTAL" : {"Datentyp": "INTEGER", "Länge": "10", "Wert": "1644704985", "verschleiert": "false"}, "MID": {"Datentyp": "ALPHANUMERIC", "length ":" 27 "," Wert ":" Lieferant 1 "," verschleiert ":" falsch "}}, {" SUM_PTS ": {" Datentyp ":" INTEGER "," Länge ":" 7 "," Wert " : "3283570", "verschleiert": "false"}, "SUM_TOTAL": {"Datentyp": "INTEGER", "length": "9", "value": "180596350", "obfuscated": "false" }, "MID": {"Datentyp": "ALPHANUMERIC", "length": "23", "value": "Lieferant 2", "obfuscated": "false"}}]Amcharts mit ausführlichen JSON

In Anbetracht der obigen ausführlichen JSON, wie ordne ich das valueField und titleField zu?

SUM_PTS und MID scheinen nicht zu funktionieren. Ich denke, das liegt daran, dass mein JSON ausführlicher ist als in den Beispielen. Ich kann den JSON jedoch nicht ändern, ich muss im Amcharts Javascript auflösen.

+0

amCharts nicht verschachtelte JSON lesen kann, so dass Sie Ihre Daten gehen müssen neu zuordnen um es sowieso an AmCharts weiterzugeben. Sie können dies in JavaScript tun, wenn Sie den Web Service nicht ändern können. Wenn Sie darauf hinweisen, was Ihr Titelfeld und Ihr Wertfeld sein soll, kann ich Ihnen zeigen, wie Sie es neu zuordnen können, damit es mit dem Diagramm funktioniert, das Sie verwenden möchten. – xorspark

+0

Danke @xorspark. Das Titelfeld wäre der Wert von MID und das Wertfeld wäre der Wert von SUM_PTS. – Klaptrap

+0

Danke für die Info. Siehe meine Antwort unter – xorspark

Antwort

1

Da SUM_PTS Ihren Wert enthält, und MID enthält Titel, um es zu einem vereinfachten Datenprovider-Format abzubilden ist ziemlich einfach:

//assuming rawJson contains the above data: 

var dataProvider = rawJson.map(function(jsonObj) { 
    return { 
    "title": jsonObj.MID.value, 
    "value": jsonObj.SUM_PTS.value 
    } 
}); 

Hier sind Ihre neu zugeordneten Daten als Tortendiagramm zu Demonstrationszwecken ausgedrückt:

var rawJson = [{ 
 
\t "SUM_PTS": { 
 
\t \t "datatype": "INTEGER", 
 
\t \t "length": "8", 
 
\t \t "value": "29903727", 
 
\t \t "obfuscated": "false" 
 
\t }, 
 
\t "SUM_TOTAL": { 
 
\t \t "datatype": "INTEGER", 
 
\t \t "length": "10", 
 
\t \t "value": "1644704985", 
 
\t \t "obfuscated": "false" 
 
\t }, 
 
\t "MID": { 
 
\t \t "datatype": "ALPHANUMERIC", 
 
\t \t "length": "27", 
 
\t \t "value": "Vendor 1", 
 
\t \t "obfuscated": "false" 
 
\t } 
 
}, { 
 
\t "SUM_PTS": { 
 
\t \t "datatype": "INTEGER", 
 
\t \t "length": "7", 
 
\t \t "value": "3283570", 
 
\t \t "obfuscated": "false" 
 
\t }, 
 
\t "SUM_TOTAL": { 
 
\t \t "datatype": "INTEGER", 
 
\t \t "length": "9", 
 
\t \t "value": "180596350", 
 
\t \t "obfuscated": "false" 
 
\t }, 
 
\t "MID": { 
 
\t \t "datatype": "ALPHANUMERIC", 
 
\t \t "length": "23", 
 
\t \t "value": "Vendor 2", 
 
\t \t "obfuscated": "false" 
 
\t } 
 
}] 
 

 
var dataProvider = rawJson.map(function(jsonObj) { 
 
    return { 
 
    "title": jsonObj.MID.value, 
 
    "value": jsonObj.SUM_PTS.value 
 
    } 
 
}); 
 

 
AmCharts.makeChart("chartdiv", { 
 
    "type": "pie", 
 
    "titleField": "title", 
 
    "valueField": "value", 
 
    "dataProvider": dataProvider 
 
})
<script src="//www.amcharts.com/lib/3/amcharts.js"></script> 
 
<script src="//www.amcharts.com/lib/3/pie.js"></script> 
 

 
<div id="chartdiv" style="width: 100%; height: 300px"></div>

+0

Vielen Dank @xorspark. Ich verwende auch einen Dataloader, um den JSON von einer URL zu laden. Irgendwelche Hinweise auf die Kombination von Datenprovider mit Dataloader? – Klaptrap

+0

Sie können [postProcess callback] (https://github.com/amcharts/dataloader/#complete-list-of-available-dataloader-settings) im dataLoader verwenden, um die gleiche Kartenaktion in meiner Demo auf der ersten durchzuführen Parameter übergibt es und gibt das neu zugeordnete Array zurück, zB 'dataLoader: {url:/* Ihre URL hier * /, postProcess: function (rawJson) {/ * map code hier, return resulting array * /}}' – xorspark