我使用Papa.unparse()将JSON对象转换为csv,然后下载该文件。该方法失败,并显示以下错误:
“分配大小溢出papaparse.min.js:6:1580”
在firefox中,当JSON数组中有超过500,000个项目需要解析时,就会发生这种情况。
Papa.parse()方法允许您从文件中流式传输数据。对于Papa.unparse(),有没有类似的方法?
发布于 2015-08-04 13:00:55
你不需要PapaParse来做这件事。
分配大小溢出问题是将500,000行转换为500,000个字符串,并将它们连接在一起形成一个巨大的字符串来创建CSV文件。当您将一个或多个字符串连接在一起时,JavaScript会创建一个新字符串,最终会耗尽内存并导致崩溃。
解决方案是使用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。
https://stackoverflow.com/questions/31722808
复制相似问题