javascript - 对象为 CSV 格式并在 JavaScript 中导出
问题描述
导出为 CSV 后,大字符串正在获取并重写其他单元格屏幕截图 导出结果
链接到 jsfiddle 代码 在此处输入链接描述 问题是如何将 lar 字符串保留在不影响其他单元格数据的单元格中
var newS = {
Name: "https://www.someweb.com/product/2019-new-shoulder-bags-leather-bucket-bag/452346283.html?d1_posid=6c776030d97bebe241c60070a53e7683&dspm=pcen.hp.relatedviewed.3.qJcEmZmc4A8ZV2ksdlct&resource_id=452346283#hp1507_reit-3-5|null:2001:r1045009996.json",
rating: "Google Inc",
rating: "Google Inc",
Price: "554.52"
}
stockData.push(newS);
}
function convertArrayOfObjectsToCSV(args) {
var result, ctr, keys, columnDelimiter, lineDelimiter, data;
data = args.data || null;
if (data == null || !data.length) {
return null;
}
columnDelimiter = args.columnDelimiter || ',';
lineDelimiter = args.lineDelimiter || '\n';
keys = Object.keys(data[0]);
result = '';
result += keys.join(columnDelimiter);
result += lineDelimiter;
data.forEach(function(item) {
ctr = 0;
keys.forEach(function(key) {
if (ctr > 0) result += columnDelimiter;
result += item[key];
ctr++;
});
result += lineDelimiter;
});
return result;
}
解决方案
问题不在于您向我们展示的部分,而downloadCSV
在于仅包含在您的小提琴中的实际功能。
if (!csv.match(/^data:text\/csv/i)) {
csv = 'data:text/csv;charset=utf-8,' + csv;
}
data = encodeURI(csv);
encodeURI
在为 URL 上下文正确编码数据时,几乎从来都不是正确的选择。
这需要改为使用encodeURIComponent
- 但因为这也会在内部编码字符data:text/csv;charset=utf-8,
,所以这两个步骤也需要以相反的顺序发生:
csv = encodeURIComponent(csv)
csv = 'data:text/csv;charset=utf-8,' + csv;
data = csv; // keept this, so the rest of your code can still work with the data variable
https://jsfiddle.net/vky7b5dg/
我在这里删除了 if 条件 - 如果数据data:text/csv
在开始时已经包含,它无论如何都不会工作。然后需要在 URL 编码发生之前将其删除,然后再添加。此功能似乎尝试并且非常通用,但看起来您不需要该部分用于您的特定用例。
(当然,这仍然完全没有对 CSV 上下文的数据进行任何适当的转义。如果您的任何数据字段包含 a ,
,这仍然会搞砸。但是,这是convertArrayOfObjectsToCSV
函数的问题,而不是这个处理下载部分。)
推荐阅读
- swift - 端口问题的 Alamofire DisabledTrustEvaluator
- python - 将随机字母分配给变量,但每个字母在 Python 中必须出现 2 次或 4 次
- api - 我想获得连接身份验证 api
- javascript - 页面缩小时 scrollTop 不起作用
- maven - Maven 凭证 - 如何安全地存储它们
- javascript - 基于使用 jquery 的选择选项的升序/降序表
- python - 根据审计日志确定每个用户的登录频率
- amazon-web-services - chmod 600 后权限太开放
- firebase-dynamic-links - 通过 REST API 创建 Firebase 控制台动态链接
- machine-learning - 用更高的 dropout 概率重新训练模型