我有一个JSON文件,大约800MB,我无法将其加载到内存中,即使使用
FileReader.readAsText
(result属性是一个空字符串)。我认为这与此无关,但JSON文件是一个由大约350万个小对象组成的数组。请注意,该文件由用户在浏览器中拾取,并且永远不会离开浏览器。所有处理都在浏览器中进行。
我试过了
Oboe.js
可以将输入流式传输进来,但过了一会儿就停止了。看看这个事件,我猜Oboe正在存储它解析的所有JSON对象。如果我理解正确,他们的浏览器版本也不支持流。
有没有转发JSON的方法?我不介意没有之前的状态,类似于。网
Utf8JsonReader
?
以下是我目前对双簧管的尝试:
async loadAsync(file: Blob) {
const blocks: any[] = this.blocks = [];
await new Promise<void>(r => {
const ms = Date.now();
const url = URL.createObjectURL(file);
let counter = 0;
oboe(url)
.node("!.[*]", (block: any) => {
blocks.push(block);
counter++;
if (counter % 5000 == 0) {
this.logFn(`Loading: ${counter} items so far.`);
}
})
.done((fullJson: any) => {
debugger;
this.logFn(`Finished loading ${counter} blocks in ${Date.now() - ms}ms`);
r();
})
.fail((err: any) => {
console.error(err);
this.logFn(err);
});
});
}
这适用于小文件,但对于大约25000个项目之后的大文件,存在以下错误: