Ich habe eine Datei, in der viele JavaScript-Objekte in JSON-Form gespeichert sind, und ich muss die Datei lesen, jedes der Objekte erstellen und etwas damit tun (in meinem Fall in eine Datenbank einfügen). Die JavaScript-Objekte können in einem Format dargestellt werden:
Format A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
oder Format B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
Beachten Sie, dass das ...
viele JSON-Objekte anzeigt. Mir ist bewusst, dass ich die gesamte Datei in den Speicher lesen und dann folgendermaßen verwenden JSON.parse()
kann:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
Die Datei könnte jedoch sehr groß sein. Ich würde es vorziehen, einen Stream zu verwenden, um dies zu erreichen. Das Problem, das ich bei einem Stream sehe, ist, dass der Dateiinhalt jederzeit in Datenblöcke aufgeteilt werden kann. Wie kann ich ihn also JSON.parse()
für solche Objekte verwenden?
Im Idealfall wird jedes Objekt als separater Datenblock gelesen, aber ich bin mir nicht sicher, wie das geht .
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!");
});*/
Hinweis: Ich möchte verhindern, dass die gesamte Datei in den Speicher eingelesen wird. Zeiteffizienz spielt für mich keine Rolle. Ja, ich könnte versuchen, mehrere Objekte gleichzeitig zu lesen und alle gleichzeitig einzufügen, aber das ist eine Leistungsoptimierung - ich brauche einen Weg, der garantiert keine Speicherüberlastung verursacht, unabhängig davon, wie viele Objekte in der Datei enthalten sind .
Ich kann verwenden , wählen FormatA
oder FormatB
oder vielleicht etwas anderes, nur geben Sie bitte Ihre Antwort. Vielen Dank!