我的以下代码输出一个接一个的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';
}
}
这里有一个小提琴作为一个例子。