2016-04-25 69 views
1

我想让数组适合从SQL返回的Highchart数据。Highcharts图表来自sql的动态json数据

这个数组应该可用于Highchart。

你能帮我解决这个问题吗?

从SQL返回的JSON值

{ 
 
         "FuelConsumption": [{ 
 
         "Unit": "Computing", 
 
         "UnitID": 9, 
 
         "DateofPurchase": "18.04.2016", 
 
         "Liter": 2 
 
         }, { 
 
         "Unit": "Transportation", 
 
         "UnitID": 10, 
 
         "DateofPurchase": "18.04.2016", 
 
         "Liter": 3453 
 
         }, { 
 
         "Unit": "GeneralManager", 
 
         "UnitID": 7, 
 
         "DateofPurchase": "20.04.2016", 
 
         "Liter": 5 
 
         }, { 
 
         "Unit": "Boss", 
 
         "UnitID": 8, 
 
         "DateofPurchase": "20.04.2016", 
 
         "Liter": 4564 
 
         }, { 
 
         "Unit": "Computing", 
 
         "UnitID": 9, 
 
         "DateofPurchase": "20.04.2016", 
 
         "Liter": 579 
 
         }, { 
 
         "Unit": "Transportation", 
 
         "UnitID": 10, 
 
         "DateofPurchase": "20.04.2016", 
 
         "Liter": 337 
 
         }, { 
 
         "Unit": "Boss", 
 
         "UnitID": 8, 
 
         "DateofPurchase": "21.04.2016", 
 
         "Liter": 3 
 
         }, { 
 
         "Unit": "Transportation", 
 
         "UnitID": 10, 
 
         "DateofPurchase": "21.04.2016", 
 
         "Liter": 22 
 
         }] 
 
        }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>

我想要得到的结果是这样的:

{ 
 
    name: 'Transportation', 
 
    data: [3453, 337, 22] 
 
}, { 
 
    name: 'Computing', 
 
    data: [2, 5, 579] 
 
}, { 
 
    name: 'Boss', 
 
    data: [4564, 3] 
 
}

回答

1

您可以创建一个来自json的散列, '单元'值作为键,它是一个数组并继续向该数组添加'Liter'值。完成后,从该散列创建json。

var hash = {}; 
data.FuelConsumption.forEach(function(obj) { 
    if (!hash[obj.Unit]) { 
    hash[obj.Unit] = []; 
    } 
    hash[obj.Unit].push(obj.Liter); 
}); 

var newData = []; 
for (var key in hash) { 
    newData.push({ 
    name: key, 
    data: hash[key] 
    }); 
} 

如果您正在使用Lodash,然后

var newData2 = _.chain(data.FuelConsumption) 
    .groupBy('Unit') 
    .map(function(obj) { 
    return { 
     name: _.uniq(_.pluck(obj, 'Unit'))[0], 
     data: _.uniq(_.pluck(obj, 'Liter')) 
    }; 
    }) 
    .value(); 
+0

谢谢你的哥们。 这就是我正在寻找的。 –

0

如果你可以使用下划线,得到的回答是:

_.chain(data["FuelConsumption"]) 
.groupBy('Unit') 
.mapObject((val, key)=>({name:key, data:val.map(x => x.Liter)})) 
.value() 

,如果你使用任何其他它会类似JavaScript库。