Tengo un archivo que almacena muchos objetos JavaScript en formato JSON y necesito leer el archivo, crear cada uno de los objetos y hacer algo con ellos (insertarlos en una base de datos en mi caso). Los objetos JavaScript se pueden representar con un formato:
Formato A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
o formato B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
Tenga en cuenta que ...
indica muchos objetos JSON. Soy consciente de que podría leer todo el archivo en la memoria y luego usarlo JSON.parse()
así:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
Sin embargo, el archivo podría ser muy grande, preferiría usar una secuencia para lograr esto. El problema que veo con una transmisión es que el contenido del archivo podría dividirse en fragmentos de datos en cualquier momento, entonces, ¿cómo puedo usarlo JSON.parse()
en tales objetos?
Idealmente, cada objeto se leería como un fragmento de datos separado, pero no estoy seguro de cómo hacerlo .
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!");
});*/
Tenga en cuenta que deseo evitar leer todo el archivo en la memoria. La eficiencia del tiempo no me importa. Sí, podría intentar leer varios objetos a la vez e insertarlos todos a la vez, pero eso es un ajuste de rendimiento: necesito una forma que esté garantizada para no causar una sobrecarga de memoria, sin importar cuántos objetos estén contenidos en el archivo. .
Puedo elegir usar FormatA
o FormatB
tal vez algo más, solo especifique en su respuesta. ¡Gracias!