以水平格式而不是垂直格式显示由HTML / JavaScript生成的CSV文件



我的以下代码输出一个接一个的csv文件,就像

日期,值

INP2:Val2

09172013, 1

08172013, 2

INP3:Val3

09172013, 10.1

08172013, 20

这里第一列是日期,第二列是值

我怎样才能让它显示像日期 inp2 inp3
09172013, 1 , 10.1
08172013, 2, 20

谢谢

代码

<html">
<head>
    <title>JSON to CSV</title>
    <script src="json.js" type="text/javascript"></script>
    <script type="text/javascript">
    var str = '';
    var json3 = 
        {"inp2:val2": {"data": [[09172013, 1], [08172013, 2]]}, "inp3:val3": {"data": [[09172013, 10.1], [08172013, 20.0]]}}
    str +='Date,Value'+ 'rn';
    str +='inp2:val2,'+ 'rn';
    DownloadJSON2CSV(json3["inp2:val2"].data);
    str +='inp3:val3,'+ 'rn';
    DownloadJSON2CSV(json3["inp3:val3"].data);
    function DownloadJSON2CSV(objArray)
    {
        var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
       // var str = '';
        for (var i = 0; i < array.length; i++) {
            var line = '';
            for (var index in array[i]) {
                line += array[i][index] + ',';
            }

            line.slice(0,line.Length-1); 
            str += line + 'rn';
        }        
    }
 window.open( "data:text/csv;charset=utf-8," + escape(str))
    </script>
</head>
<body>
    <h1>See the downloaded csv file ....</h1>
</body>
</html>

尝试

var line;
json3["inp2:val2"].data.forEach(function (val, index) {
  line += val[0] + ',' + val[1] + ',';
  line += json3["inp3:val3"].data[index][1] + 'rn';
});

您可以尝试连接这两个数组,然后通过 JSON 到 CSV 方法将它们传递。然后,在转换方法中,您可以创建一个对象,将日期作为键,配对值将是关联值的数组。

这样,如果要有两个以上的关联值,则代码会更加灵活。

像这样:

DownloadJSON2CSV(json3["inp2:val2"].data.concat(json3["inp3:val3"].data));
function DownloadJSON2CSV(objArray) {
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
    var merged = {};
    for (var i = 0; i < array.length; i++) {
        var arr = array[i];
        if (!merged[arr[0]]) {
            merged[arr[0]] = [];
        }
        merged[arr[0]].push(arr[1]);
    }
    for (var obj in merged) {
        var line = obj;
        var arr = merged[obj];
        for (var i = 0; i<arr.length; i++) {
            line += ','+arr[i];
        }
        str += line + 'rn';
    }
}

这里有一个小提琴作为一个例子。

最新更新