提问人:bwkam 提问时间:10/23/2023 最后编辑:bwkam 更新时间:10/23/2023 访问量:53
字符串长度 array.join javascript 无效
invalid string length array.join javascript
问:
我正在使用 SheetJS 在我的前端读取巨大的 excel 文件,并使用 XLSX.utils.sheet_to_json将它们解析为 JSON。但显然,它超过了 V8 的极限。
在使用小文件进行测试时,它运行良好,但是当使用稍大的文件(大约一百万行)进行测试时,我开始出现上述错误,我还尝试一次对每个元素进行 JSON.stringify,但这仍然会产生相同的错误。我不确定如何规避这样的问题,我想过将JSON转换为二进制文件或将其gzip压缩以POSTing到服务器,但据我所知,这仍然需要对对象进行JSON.stringify。
到目前为止,我拥有的用于字符串化 JSON 的代码。
const payloadEntries = Object.entries(payload).map(([key, value]) => {
return `"${key}":[${value
.map((el) => JSON.stringify(el))
.join(",")}]`;
});
有效负载对象如下所示
[
{
"A":"2023/23/10 1:19",
"B":"3",
"C":"1",
"D":"3-1",
},
{
"A":"2023/23/10 1:19",
"B":"4",
"C":"2",
"D":"4-1",
},
]
编辑:这使用普通的JavaScript,而不是节点。
答:
-1赞
Marwi
10/23/2023
#1
JSON.stringify 在处理大型数据结构时会消耗大量内存。
下面是一个示例,说明如何使用 Node.js 从 Excel 文件流式传输数据并将其转换为 JSON:
const XLSX = require('xlsx');
const fs = require('fs');
const JSONStream = require('JSONStream');
const workbook = XLSX.readFile('largefile.xlsx');
const sheetName = workbook.SheetNames[0];
const sheet = workbook.Sheets[sheetName];
const jsonStream = JSONStream.stringify();
const writeStream = fs.createWriteStream('output.json');
jsonStream.pipe(writeStream);
XLSX.stream.to_json(sheet)
.pipe(jsonStream);
writeStream.on('finish', () => {
console.log('JSON file has been written');
});
// You can now send the JSON file to your server or process it on the server.
评论
0赞
bwkam
10/23/2023
感谢您的回答,但我忘了提到我在浏览器上使用香草 JS,没有 bunder,所以我没有使用 node。
评论