我有一些看起来像这样的JSON数据,其中每个对象都有三个属性:
data = [
{
"country" : "Ireland",
"year" : "2013",
"number" : 45
},
{
"country" : "Ireland",
"year" : "2014",
"number" : 23430
},
{
"country" : "Honduras",
"year" : "2013",
"number" : 1582
},
{
"country" : "Honduras",
"year" : "2014",
"number" : 3458
}
]
我想转换我的数据,以便每个对象只有两个属性。名为“country”的财产将保持不变。我想组合其他两个属性,以便“year”的值成为新属性的键,“number”的值是新属性的值。所以新的JSON对象数组看起来像这样:
newData = [
{
"country" : "Ireland",
"2013" : 45,
"2014" : 23430
},
{
"country" : "Honduras",
"2013" : 1582,
"2014" : 3458
}
]
我该怎么做呢?我做了很多搜索,找不到解决方案。我更喜欢使用javascript来做这个而不是库。
答案 0 :(得分:1)
只需遍历每个数据项并将项添加到结果数组中。您可以创建地图以跟踪您在迭代中看到的国家/地区,以便快速访问。
var newData = [],
countries = {};
data.forEach(function (d) {
var country = countries[d.country];
if (!country) {
newData.push(country = countries[d.country] = {});
}
country[d.year] = d.number;
});
答案 1 :(得分:0)
抱歉,这次是javascript的答案:
country_data = new Array();
for(l in data){
if(typeof(country_data[data[l].country]) == 'undefined'){
country_data[data[l].country] = new Array();
}
country_data[data[l].country].country = data[l]['country'];
country_data[data[l].country][data[l].year] = data[l]['number'];
}
new_arr = new Array();
for(v in country_data){
new_arr.push(country_data[v])
}
console.log(new_arr);