如@sandeepanu所述,如果您试图将一个巨大的数组字符串化,@madhunimmo提供了一个很好的小解决方案(链接)。只需逐个字符串化一个元素即可:
let out = "[" + yourArray.map(el => JSON.stringify(el)).join(",") + "]";
如果您想将具有大量键/属性的对象字符串化,那么您可以先使用
Object.entries()
将其转换为键/值对数组:
let out = "[" + Object.entries(yourObject).map(el => JSON.stringify(el)).join(",") + "]";
如果仍然无法解决问题,那么您可能需要使用流式处理方法,虽然您可以将数组切片成多个
jsonl
(每行一个对象)文件进行存储。
let numFiles = 4;
for(let i = 0; i < numFiles; i++) {
let out = arr.slice((i/numFiles)*arr.length, ((i+1)/numFiles)*arr.length).map(el => JSON.stringify(el)).join(",");
}
一种流式处理的方法(新的,目前仅在Chrome中支持,但很可能会在其他浏览器中以某种形式出现,甚至在Deno和Node.js中)是使用文件系统访问API。代码看起来像这样:
const dirHandle = await window.showDirectoryPicker();
const fileHandle = await dirHandle.getFileHandle('yourData.jsonl', { create: true });
const writable = await fileHandle.createWritable();
for(let el of yourArray) {
await writable.write(JSON.stringify(el)+"\n");
}
await writable.close();