Eu tenho um arquivo que armazena muitos objetos JavaScript no formato JSON e preciso ler o arquivo, criar cada um dos objetos e fazer algo com eles (inseri-los em um banco de dados no meu caso). Os objetos JavaScript podem ser representados em um formato:
Formato A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
ou Formato B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
Observe que ...
indica muitos objetos JSON. Estou ciente de que posso ler todo o arquivo na memória e usar JSON.parse()
desta forma:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
No entanto, o arquivo pode ser muito grande, prefiro usar um fluxo para fazer isso. O problema que vejo com um fluxo é que o conteúdo do arquivo pode ser dividido em blocos de dados a qualquer momento, então, como posso usar JSON.parse()
nesses objetos?
Idealmente, cada objeto seria lido como um bloco de dados separado, mas não tenho certeza de como fazer isso .
var importStream = fs.createReadStream(filePath, {flags: 'r', encoding: 'utf-8'});
importStream.on('data', function(chunk) {
var pleaseBeAJSObject = JSON.parse(chunk);
// insert pleaseBeAJSObject in a database
});
importStream.on('end', function(item) {
console.log("Woot, imported objects into the database!");
});*/
Observe, desejo evitar a leitura de todo o arquivo na memória. A eficiência do tempo não importa para mim. Sim, eu poderia tentar ler vários objetos de uma vez e inseri-los todos de uma vez, mas isso é um ajuste de desempenho - preciso de uma maneira que garantidamente não cause uma sobrecarga de memória, não importa quantos objetos estejam contidos no arquivo .
Posso escolher usar FormatA
ou FormatB
ou talvez outra coisa, apenas especifique na sua resposta. Obrigado!