首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何Papa.unparse一个巨大的JSON对象

如何Papa.unparse一个巨大的JSON对象
EN

Stack Overflow用户
提问于 2015-07-30 19:40:55
回答 1查看 2.1K关注 0票数 0

我使用Papa.unparse()将JSON对象转换为csv,然后下载该文件。该方法失败,并显示以下错误:

“分配大小溢出papaparse.min.js:6:1580”

在firefox中,当JSON数组中有超过500,000个项目需要解析时,就会发生这种情况。

Papa.parse()方法允许您从文件中流式传输数据。对于Papa.unparse(),有没有类似的方法?

EN

回答 1

Stack Overflow用户

发布于 2015-08-04 13:00:55

你不需要PapaParse来做这件事。

分配大小溢出问题是将500,000行转换为500,000个字符串,并将它们连接在一起形成一个巨大的字符串来创建CSV文件。当您将一个或多个字符串连接在一起时,JavaScript会创建一个新字符串,最终会耗尽内存并导致崩溃。

解决方案是使用TextEncoder将字符串编码为utf-8 (或您需要的任何格式) ArrayBuffers,将每个字符串压入一个巨大的数组,然后使用该数组创建文件。

这里有一些粗略的代码,告诉你如何做到这一点:

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31722808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档