我使用Papa.unparse()将JSON对象转换为csv然后下载文件。该方法失败了:
"分配大小溢出papaparse.min.js:6:1580"
这种情况发生在firefox中,当时有>在JSON数组中解析500,000个以上的项目。
Papa.parse()方法允许您从文件中流式传输数据。你可以为Papa.unparse()做任何类似的方法吗?
答案 0 :(得分:0)
你不需要PapaParse来做这件事。
分配大小溢出问题是将您的500,000行转换为500,000个字符串并将它们连接在一起形成一个大字符串以创建CSV文件。当您将一个或多个连接在一起时,JavaScript会创建一个新的String,最终会耗尽内存并崩溃。
解决方案是使用TextEncoder将字符串编码为utf-8(或任何你需要的)ArrayBuffers,将每个字符串推入一个巨大的数组,然后使用该数组创建文件。
这里有一些关于如何做到这一点的粗略代码:
var textEncoder = new TextEncoder("utf-8");
var headers = ["header1","header2","header3"];
var row1 = ["column1-1","column1-2","column1-3"];
var row2 = ["column2-1","column-2-2","column2-3"];
var data = [headers,row1,row2];
var arrayBuffers = [];
var csvString = '';
var encodedString = null;
var file = null;
for(var x=0;x<data.length;x++){
csvString = data[x].join(",").concat('\r\n');
encodedString = textEncoder.encode(csvString);
arrayBuffers.push(encodedString);
}
file = new File(arrayBuffers,"yourCsvFile.csv",{ type: "text/csv" });
我使用text-encoding进行TextEncoder polyfill,大概是如果你正在尝试Papa.unparse,你已经有了FileAPI。