Ho un file che memorizza molti oggetti JavaScript in formato JSON e ho bisogno di leggere il file, creare ciascuno degli oggetti e fare qualcosa con loro (inserirli in un db nel mio caso). Gli oggetti JavaScript possono essere rappresentati in un formato:
Formato A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
o Formato B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
Si noti che ...
indica molti oggetti JSON. Sono consapevole di poter leggere l'intero file in memoria e quindi utilizzare in JSON.parse()
questo modo:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
Tuttavia, il file potrebbe essere molto grande, preferirei utilizzare un flusso per farlo. Il problema che vedo con un flusso è che il contenuto del file potrebbe essere suddiviso in blocchi di dati in qualsiasi momento, quindi come posso usarlo JSON.parse()
su tali oggetti?
Idealmente, ogni oggetto verrebbe letto come un blocco di dati separato, ma non sono sicuro di come farlo .
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!");
});*/
Nota, desidero impedire la lettura dell'intero file in memoria. L'efficienza del tempo non mi importa. Sì, potrei provare a leggere più oggetti contemporaneamente e inserirli tutti in una volta, ma è una modifica delle prestazioni: ho bisogno di un modo che sia garantito per non causare un sovraccarico di memoria, non importa quanti oggetti sono contenuti nel file .
Posso scegliere di usare FormatA
o FormatB
forse qualcos'altro, basta specificare nella risposta. Grazie!