J'ai un fichier qui stocke de nombreux objets JavaScript sous forme JSON et je dois lire le fichier, créer chacun des objets et faire quelque chose avec eux (insérez-les dans une base de données dans mon cas). Les objets JavaScript peuvent être représentés par un format:
Format A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
ou Format B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
Notez que le ...
indique un grand nombre d'objets JSON. Je suis conscient que je pourrais lire l'intégralité du fichier en mémoire, puis l'utiliser JSON.parse()
comme ceci:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
Cependant, le fichier peut être très volumineux, je préférerais utiliser un flux pour ce faire. Le problème que je vois avec un flux est que le contenu du fichier peut être divisé en morceaux de données à tout moment, alors comment puis-je l'utiliser JSON.parse()
sur de tels objets?
Idéalement, chaque objet serait lu comme un bloc de données distinct, mais je ne sais pas comment faire cela .
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 souhaite empêcher la lecture du fichier entier en mémoire. L'efficacité du 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 un ajustement des performances - j'ai besoin d'un moyen qui garantit de ne pas causer de surcharge de mémoire, quel que soit le nombre d'objets contenus dans le fichier .
Je peux choisir d'utiliser FormatA
ou FormatB
ou peut-être autre chose, veuillez simplement le préciser dans votre réponse. Merci!