1

我下面的代码在另一个下面输出 csv 文件,例如

日期、值

inp2:val2

09172013, 1

08172013, 2

inp3:val3

09172013, 10.1

08172013, 20

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

我怎样才能让它显示为 Date 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'+ '\r\n';
    str +='inp2:val2,'+ '\r\n';
    DownloadJSON2CSV(json3["inp2:val2"].data);
    str +='inp3:val3,'+ '\r\n';
    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 + '\r\n';
        }        
    }
 window.open( "data:text/csv;charset=utf-8," + escape(str))
    </script>

</head>
<body>
    <h1>See the downloaded csv file ....</h1>
</body>
</html>
4

2 回答 2

0

您可以尝试连接两个数组,然后将它们通过 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 + '\r\n';
    }
}

这里以 Fiddle 为例。

于 2013-09-17T15:19:48.247 回答
0

尝试

var line;
json3["inp2:val2"].data.forEach(function (val, index) {
  line += val[0] + ',' + val[1] + ',';
  line += json3["inp3:val3"].data[index][1] + '\r\n';
});
于 2013-09-17T14:59:44.633 回答