用JSON数组分配一个非常长的文件



我有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,因此应该非常健壮且经过良好的测试。

相关内容

  • 没有找到相关文章