Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JSON数据从API转换为有用的格式?_Javascript_Json - Fatal编程技术网

Javascript 将JSON数据从API转换为有用的格式?

Javascript 将JSON数据从API转换为有用的格式?,javascript,json,Javascript,Json,我有一个API,它以以下格式返回指标数据: [ { "concept": "population", "year": 2012, "value": 9.5, "country-name": "Sweden", }, { "concept": "education", "year": 2012, "value

我有一个API,它以以下格式返回指标数据:

[
    {
            "concept": "population",
            "year": 2012,
            "value": 9.5,
            "country-name": "Sweden",
    },
    {
            "concept": "education",
            "year": 2012,
            "value": 12,
            "country-name": "Sweden",
    },
    {
            "concept": "population",
            "year": 2012,
            "value": 5,
            "country-name": "Norway",
    },
    {
            "concept": "eduction",
            "year": 2012,
            "value": 12,
            "country-name": "Norway",
    }
]
基于此,我通常需要按国家和年份对其进行分组,以获得如下结果:

var data = [
   {id : Sweden, population : 9.5, education: 12},
   {id : Norway, population : 5, education: 12},
]
或者仅按国家和年份值作为数组:

var data = [
   {id : Sweden, values : [ { year : 2012, population : 9.5, education: 12 }, {...} ]},
   {id : Norway, values : [ { year : 2012, population : 5, education: 12 }, {...} ]},
]
var data = {};
indicatordata.forEach(function(item){
    var country = item['country-name'];
    var year = item.year;
    data[country] = data[country] || {id: item['country-name'], values: {}};
    var values = data[country].values;
    values[year] = values[year] || {};
    values[year][item.concept] = item.value;
});
  • 哪些JS库可以帮助管理这些常见的数据转换
  • 您能否提供一个执行上述操作的示例(使用库或vanilla js)
  • 你可以用它来做。具体来说。代码是声明性的,易于维护

    var rawData=[
    {
    “概念”:“人口”,
    “年份”:2012年,
    “价值”:9.5,
    “国家名称”:“瑞典”,
    },
    {
    “概念”:“教育”,
    “年份”:2012年,
    “价值”:12,
    “国家名称”:“瑞典”,
    },
    {
    “概念”:“人口”,
    “年份”:2012年,
    “价值”:5,
    “国家名称”:“挪威”,
    },
    {
    “概念”:“教育”,
    “年份”:2012年,
    “价值”:12,
    “国家名称”:“挪威”,
    }
    ];
    var data=d3.nest()
    .键(功能(d)
    {
    返回d[‘年’];
    })
    .键(功能(d)
    {
    返回d['country-name'];
    })
    .汇总(功能(组)
    {
    返回组。减少(函数(结果,d)
    {
    结果[d['concept']=d['value'];
    返回结果;
    }, {});
    })
    .条目(原始数据);
    控制台日志(数据)
    
    你可以自己做,只需迭代并创建你需要的任何东西,比如

    var data = [];
    
    json.forEach(function(item) {
        var country = item['country-name'],
            match   = false,
            obj     = {}
    
        data.forEach(function(dataItem, i) {
            if (dataItem.id === country) {
                match = true;
                obj   = data[i];
            }
        });
    
        obj.id = country;
        obj[item.concept] = item.value;
    
        if (!match) data.push(obj)
    });
    

    您可能会发现对象比数组更容易使用:

    var data = [
       {id : Sweden, values : [ { year : 2012, population : 9.5, education: 12 }, {...} ]},
       {id : Norway, values : [ { year : 2012, population : 5, education: 12 }, {...} ]},
    ]
    
    var data = {};
    indicatordata.forEach(function(item){
        var country = item['country-name'];
        var year = item.year;
        data[country] = data[country] || {id: item['country-name'], values: {}};
        var values = data[country].values;
        values[year] = values[year] || {};
        values[year][item.concept] = item.value;
    });
    

    不清楚如何从原始数组中获得结果。OP需要做的事情太简单,不能使用外部library@NicholasKyriakides“什么JS库可以帮助管理这些常见的数据转换”怎么样?是瞎了眼还是没看完这篇文章?也许,对不起