嗨,我正在尝试将来自我的网络服务器的数据内容保存到 csv 文件中。
我正在尝试这个来自stackoverflow中各种问题的代码。
.success(function(data, status, headers, config) {
console.log(data);
if (data.success) {
console.log(data);
var saving = document.createElement('a');
saving.href = 'data:attachment/csv,' + encodeURIComponent(data);
saving.download = 'Summary.csv';
saving.click();
}
})
.error(function(data, status, headers, config) {
console.log('error in downloading!');
});
Run Code Online (Sandbox Code Playgroud)
但是数据的内容没有保存到 my 中summary.csv,而是给了我这个
[object object]. 有人可以帮我弄这个吗?
第一个问题是encodeURIComponent()需要一个字符串,而你给它一个对象,所以它调用.toString()它,这就是为什么你得到[object Object].
相反,您需要自己将数据数组转换为 CSV 字符串。如果您使用的是D3.js,则可以使用d3.csv.format(rows),这非常好。或者你可以找到另一个 JS CSV 库。或者您可以使用我刚刚为您编写的以下非常简单的实现:
function csv(arr) {
var ret = [];
ret.push('"' + Object.keys(arr[0]).join('","') + '"');
for (var i = 0, len = arr.length; i < len; i++) {
var line = [];
for (var key in arr[i]) {
if (arr[i].hasOwnProperty(key)) {
line.push('"' + arr[i][key] + '"');
}
}
ret.push(line.join(','));
}
return ret.join('\n');
}
Run Code Online (Sandbox Code Playgroud)
注意:此函数假定您向它传递一个包含至少一个元素的有效数组,并且所有元素都是具有完全相同键的对象。如果这些假设都不适合您,请扩展我的功能或使用更强大的第三方库。
因此,将所有这些放在一起,您的最终代码将是:
.success(function(data, status, headers, config) {
console.log(data);
if (data.success) {
console.log(data);
var saving = document.createElement('a');
saving.href = 'data:attachment/csv,' + encodeURIComponent(csv(data.results));
saving.download = 'Summary.csv';
saving.click();
}
})
.error(function(data, status, headers, config) {
console.log('error in downloading!');
});
Run Code Online (Sandbox Code Playgroud)
请注意,我需要访问data.results以获取实际的结果数组。我假设您将使用我的csv()函数或另一个类似的函数将数组转换为 CSV 字符串。
| 归档时间: |
|
| 查看次数: |
5186 次 |
| 最近记录: |