【发布时间】:2015-02-13 10:10:46
【问题描述】:
我正在尝试在 node.js 中将一个非常大的 json 转换为 csv,但它花费了太多时间并且在转换时还导致 100% cpu。
jsonToCsv: function (data) {
var keys = Object.keys(data[0]);
var csv = [keys.join(",")];
console.time("CSVGeneration");
data.forEach(function (row) {
var line = '';
keys.forEach(function (key) {
if (typeof row[key] === 'string') {
row[key] = "" + file_utils.escapeCsv(row[key]) + "";
}
line += row[key] + ",";
});
csv.push(line);
});
console.timeEnd("CSVGeneration");
csv = csv.join("\n");
return csv;
},
escapeCsv: function (x) {
if (x)
return ('' + x.replace(/"/g, '').replace(/,/g, ' ').replace(/\n/g, " ").replace(/\r/g, " ") + '');
else
return ('');
},
平均运行 1Lac 行时,它从未恢复到甚至记录时间。我不得不手动终止该进程。
有人可以提出更好的替代方案吗?
【问题讨论】:
-
旁注:为什么你的函数接受
cb参数,却直接返回结果?此外,您是否检查过是否实际生成了行(例如,forEach()内的调试输出? -
对不起。 cb 是多余的,应该被删除。
-
是的,行已生成,但占用了太多内存和 cpu。有什么有效的内存解决方案吗?