Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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数组合并到多维单个数组_Javascript_Jquery_Json - Fatal编程技术网

Javascript 将Json数组合并到多维单个数组

Javascript 将Json数组合并到多维单个数组,javascript,jquery,json,Javascript,Jquery,Json,下面是API中的JSON,我无法控制它,因此无法更改格式。我正在努力将这些JSON数据合并到单个JSON数组中 我的要求是将具有多个系列的网格数据显示为多列,如 日期|欧拉GT2 |牛顿|哥白尼GT 编辑:JSON合并将是这样的 "seriesData": [ { "DATE": "2013-12-10T00:00:00", "Euler GT2": 10.0, Newton": 45.0, Copernicus GT": 100.0, }

下面是API中的JSON,我无法控制它,因此无法更改格式。我正在努力将这些JSON数据合并到单个JSON数组中

我的要求是将具有多个系列的网格数据显示为多列,如

日期|欧拉GT2 |牛顿|哥白尼GT

编辑:JSON合并将是这样的

"seriesData": [
      {
        "DATE": "2013-12-10T00:00:00",
        "Euler GT2": 10.0,
Newton": 45.0,
Copernicus GT": 100.0,
      },
..]
此外,列的名称将是动态的(例如,DATE、Euler GT2以JSON格式提供,在设计期间不知道)

web API JSON如下所示-

jQuery21007295361300930381_1406200781162([
  {
    "seriesName": "Station All Cached0",
    "seriesData": [
      {
        "DATE": "2013-12-10T00:00:00",
        "Euler GT2": 10.0
      },
      {
        "DATE": "2013-12-10T01:00:00",
        "Euler GT2": 11.0
      },
      {
        "DATE": "2013-12-10T02:00:00",
        "Euler GT2": 0.59
      }

    ]
  },
  {
    "seriesName": "Station All Cached1",
    "seriesData": [
      {
        "DATE": "2013-12-10T00:00:00",
        "Newton": 45.0
      },
      {
        "DATE": "2013-12-10T01:00:00",
        "Newton": 34.0
      },
      {
        "DATE": "2013-12-10T02:00:00",
        "Newton": 47.0
      }
    ]
  },
  {
    "seriesName": "Station All Cached2",
    "seriesData": [
      {
        "DATE": "2013-12-10T00:00:00",
        "Copernicus GT": 100.0
      },
      {
        "DATE": "2013-12-10T01:00:00",
        "Copernicus GT": 0.0
      },
      {
        "DATE": "2013-12-10T02:00:00",
        "Copernicus GT": 100.0
      }
    ]
  }
])

从某种意义上讲,它可能很复杂,每个系列数据也可能有多个列。例如,系列1包含列“Date | column1 | column2…”。。。以此类推,但如果我从两列开始,会更简单。

以下修改将以您期望的格式提供数据。但我建议将列数组(因为它们保持顺序)分开,将数据行分开。对于output2中给出的表/网格用例,这是更清晰、语义更丰富的数据

//Data here
var data = {.....}
var columns = {'DATE' : true};
var columnArray = ['DATE'];
var dateDataMap = {};

for(var i=0; i<data.length; i++){
    var dataArray = data[i].seriesData;
    for(var j=0; j<dataArray.length; j++){
        var dataPoint = dataArray[j];
        for(var index in dataPoint){
            if(index!=='DATE'){
                if(!columns[index]){
                    columns[index] = true;
                    columnArray.push(index);
                }

                dateDataMap[dataPoint['DATE']] = dateDataMap[dataPoint['DATE']] || {};
                dateDataMap[dataPoint['DATE']][index] = dataPoint[index];

            }
        }
    }
}

var finalDataArray = [];
for(var dateIndex in dateDataMap){
    var dataPoint = dateDataMap[dateIndex];
    dataPoint['DATE'] = dateIndex;
    finalDataArray.push(dataPoint);
}

var rows = [];


var output = {seriesData : finalDataArray};


for(var i=0; i<finalDataArray.length; i++ ){
    var dataPoint = finalDataArray[i];
    var row = [];
    for(var colIndex=0; colIndex<columnArray.length; colIndex++){
        row.push(dataPoint[columnArray[colIndex]]);
    }
    rows.push(row)
}

var Output2 = {
    column : columnArray,
    rows : rows 
}
//这里有数据
变量数据={…}
var columns={'DATE':true};
var columnArray=['DATE'];
var dateDataMap={};
对于(var i=0;i合并脚本:

var merged = (function(key){
    var res = [];

    for(var i=0;i<data.length;i++){
        for(var j=0;j<data[i].seriesData.length;j++){
            var obj = data[i].seriesData[j];
            for(var prop in obj){
                if(prop != key && obj.hasOwnProperty(prop)) {
                    if(res[obj[key]] === undefined){
                        res[obj[key]] = {};
                        res[obj[key]][key] = obj[key];
                        res.push(obj[key]);
                    }
                    res[obj[key]][prop] = obj[prop];
                }
            }
        }
    }

    for(var k=0;k<res.length;k++){
        var date = res[k];
        res[k] = res[date];
        delete res[date];
    }

    return res;
})('DATE');

演示:

能否请您告诉我们合并后的多维单个阵列的外观,这将使我们对您的要求有一个大致的了解。目前还不清楚您希望数据是什么样的。您能否使用上述数据作为输入来写下结果?很抱歉,错过了重要部分。我现在编辑了我的问题。谢谢。我将尝试获得列数组作为“键”列“日期”也可以是字符串。把它当作日销售苹果,橙色和香蕉在三个JSON对象。所以我的关键是在这里的字符串(星期一,星期六…)。我将使用您的解决方案,并很快返回报告。已编辑答案以分别包含行和列。一个小问题,生成的json具有最后带有日期元素的对象,如何使其显示为第一个元素?(例如,请参见下面@manjiThats的评论,为什么我建议使用数组,并用它更新了答案。对象不保证迭代顺序,而数组保证迭代顺序。output2是列数组和行数组。
[
  {
    "DATE": "2013-12-10T00:00:00",
    "Euler GT2": 10,
    "Newton": 45,
    "Copernicus GT": 100
  },
  {
    "DATE": "2013-12-10T01:00:00",
    "Euler GT2": 11,
    "Newton": 34,
    "Copernicus GT": 0
  },
  {
    "DATE": "2013-12-10T02:00:00",
    "Euler GT2": 0.59,
    "Newton": 47,
    "Copernicus GT": 100
  }
]