amcharts 将唯一键分配为字段

amcharts assigning unique keys as field

我想用amcharts显示一些数据。 我有一些 json 这种格式的数据来自 url:

    var jsondata = {
      "name1" : {
        "key1": 5,
        "key2": "value1",
        "data": {
            "data1": {
                "field1": 2,
                "field2": 3,
                "field3": 4
            }
        }
      },
      "name2" : {
        "key1": 5,
        "key2": "value1",
        "data": {
            "data2": {
                "field1": 2,
                "field2": 3,     
            },
            "data3": {
                "field1": 2,
                "field2": 3,     
            }
        }
    }
  }

在一个实例中,使用名称 key 作为 x 轴,key1 作为 y。 在另一个使用 data1/2/3 作为 x 及其字段的情况下。

然而,本例中的 name1/name2 和 data1/data2/data3 是 unique/dynamically 生成的。

我不确定 javascript 是否有一种简单的方法来引用这些键,或者我是否最好以另一种方式呈现数据以使其更易于访问? 如果是这样,您如何最好地表示 javascript 中的数据?

amCharts 需要特定格式的 dataProvider。格式总是这样:

[{
  "category": "Company A",
  "value": 100
}, {
  "category": "Company B",
  "value": 200
}, {
  // etc ...
}]

您可以为 categoryvalue 使用不同的键名,但 dataProvider 应该始终是一个对象数组。

您可以将您的 json 数据转换成这种格式。这很简单。假设 name1name2 键实际上是类别:

var my_dataprovider = [];

for(category in jsondata){

  my_dataprovider.push({
    "category": category,
    "key1": jsondata[category].key1,
    "key2": jsondata[category].key2
  });

}

如果您还需要 amCharts 可以访问嵌套字段,我会 "flatten" 它们:

var my_dataprovider = [];

for(category in jsondata){

  var data_item = {
    "category": category,
    "key1": jsondata[category].key1,
    "key2": jsondata[category].key2
  };

  // flatten nested fields (inside "data")
  for(key in jsondata[category].data){
    // data1... or data2, data3...
    for(field in jsondata[category].data[key]){
      // field1, field2...
      data_item[key + '_' + field] = jsondata[category].data[key][field];
    }
  }

  /*
    {
      "category": "name1",
      "key1": 5,
      "key2": "value1",
      "data1_field1": 2,
      "data1_field2": 3,
      "data1_field3": 4
    }
  */

  my_dataprovider.push(data_item);

}

您可以将 amCharts 图表的 valueField 设置为数据提供程序中的键之一。

var chart = AmCharts.makeChart("chartdiv", {
  "type": "serial",
  "dataProvider": my_dataprovider,
  "categoryField": "category",
  "graphs": [{
    // ...
    "valueField": "data1_field1"
  }]
});