J'ai un fichier qui stocke de nombreux objets JavaScript, JSON forme et j'ai besoin de lire le fichier, de créer chacun de ces objets, et de faire quelque chose avec eux (les insérer dans une base de données dans mon cas). Les objets JavaScript peut être représenté un format:
Format A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
ou Format B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
Notez que l' ...
indique un lot d'objets JSON. Je suis conscient que je pouvais lire tout le fichier en mémoire et ensuite utiliser JSON.parse()
comme ceci:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
Toutefois, le fichier pourrait être vraiment grand, je préfère utiliser un flux pour accomplir cette tâche. Le problème que je vois avec un ruisseau, c'est que le contenu du fichier peut être brisé en morceaux de données à tout moment, alors comment puis-je utiliser JSON.parse()
sur de tels objets?
Idéalement, chaque objet serait de lire séparément les données de morceau, mais je ne suis pas sûr de la façon de le faire.
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!");
});*/
Remarque, je tiens à prévenir la lecture de la totalité du fichier en mémoire. L'efficacité dans le temps n'a pas d'importance pour moi. Oui, je pourrais essayer de lire un certain nombre d'objets à la fois et de les insérer tous à la fois, mais c'est une performance tweak - je besoin d'une manière qui est garanti de ne pas provoquer une surcharge de la mémoire, pas d'importance combien d'objets sont contenus dans le fichier.
Je peux choisir d'utiliser FormatA
ou FormatB
ou peut-être quelque chose d'autre, veuillez préciser dans votre réponse. Merci!