我有JSON Array(〜8GB)的非常大的文件。我需要将其分成一组小文件,每个文件包含数组的一部分。
数组仅包含对象。
我决定实现此算法:
- 通过符号读取文件
- 向缓冲区添加符号
- 尝试将缓冲区解析为JSON-OBJECT。
- 如果解析将对象写成文件
- 当文件达到一定大小时,更改文件
我尝试自己实施,但要完成类似的事情:
var fs = require('fs');
readable = fs.createReadStream("walmart.dump", {
encoding: 'utf8',
fd: null,
});
var chunk, buffer = '', counter=0;
readable.on('readable', function() {
readable.read(1);
while (null !== (chunk = readable.read(1))) {
buffer += chunk; // chunk is one symbol
console.log(buffer.length);
if (chunk !== '}') continue;
try {
var res = JSON.parse(buffer);
console.log(res);
readable.read(1);
readable.read(1);
readable.read(1);
//Array.apply(null, {length: 10}).map(function(){return readable.read(1)});
buffer = '{';
} catch(e) { }
}
})
有人解决了类似的问题吗?
单簧管模块(https://github.com/dscape/clarinet)对我来说很有希望。它基于sax-js,因此应该非常健壮且经过良好的测试。