Trabajo con CSV en Node.js: bibliotecas csv-parser y csv-writer
CSV (Comma-Separated Values) es uno de los formatos más populares para almacenar e intercambiar datos tabulares. En el ecosistema de Node.js existen muchas herramientas para trabajar con este formato. En este artículo veremos dos de las bibliotecas más convenientes y ligeras: csv-parser para lectura y csv-writer para escritura de archivos CSV.
Instalación de las bibliotecas
Para comenzar, instale ambas bibliotecas a través de npm:
npm install csv-parser csv-writerLectura de archivos CSV con csv-parser
La biblioteca csv-parser convierte datos CSV en un flujo de objetos JavaScript. Funciona basándose en Node.js Streams, lo que permite procesar eficientemente incluso archivos muy grandes sin cargarlos completamente en memoria.
Ejemplo básico de lectura
Creemos un archivo users.csv con el siguiente contenido:
name,age,cityAna,28,MadridJuan,35,BarcelonaMaría,22,ValenciaAhora lo leeremos usando csv-parser:
const fs = require('fs');const csv = require('csv-parser');
const results = [];
fs.createReadStream('users.csv') .pipe(csv()) .on('data', (data) => results.push(data)) .on('end', () => { console.log('Registros leídos:', results.length); console.log('Primer registro:', results[0]); // Salida: { name: 'Ana', age: '28', city: 'Madrid' } });Configuración del separador y encabezados
csv-parser admite varias configuraciones. Por ejemplo, si su CSV usa punto y coma como separador:
fs.createReadStream('users.csv') .pipe(csv({ separator: ';' })) .on('data', (row) => console.log(row));Si el archivo no tiene encabezados, puede especificarlos manualmente:
fs.createReadStream('data.csv') .pipe(csv({ headers: ['id', 'product', 'price'] })) .on('data', (row) => console.log(row));Escritura de archivos CSV con csv-writer
La biblioteca csv-writer permite crear archivos CSV a partir de arreglos de objetos. Soporta diferentes codificaciones y separadores.
Creación de un archivo CSV simple
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({ path: 'output.csv', header: [ { id: 'name', title: 'Nombre' }, { id: 'age', title: 'Edad' }, { id: 'city', title: 'Ciudad' } ]});
const records = [ { name: 'Ana', age: 28, city: 'Madrid' }, { name: 'Juan', age: 35, city: 'Barcelona' }, { name: 'María', age: 22, city: 'Valencia' }];
csvWriter.writeRecords(records) .then(() => console.log('Archivo CSV creado exitosamente'));Configuraciones adicionales de csv-writer
Puede cambiar el delimitador de campos, agregar BOM para la correcta visualización de caracteres cirílicos en Excel y especificar la codificación:
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({ path: 'output_utf8.csv', header: [ { id: 'name', title: 'Nombre' }, { id: 'age', title: 'Edad' } ], fieldDelimiter: ';', alwaysQuote: true, encoding: 'utf8'});Ejemplo práctico: conversión de JSON a CSV
A menudo surge la tarea de convertir datos JSON al formato CSV. Aquí hay un ejemplo completo:
const fs = require('fs');const createCsvWriter = require('csv-writer').createObjectCsvWriter;
// Datos de origenconst jsonData = [ { id: 1, product: 'Portátil', price: 75000, quantity: 10 }, { id: 2, product: 'Ratón', price: 1500, quantity: 50 }, { id: 3, product: 'Teclado', price: 3500, quantity: 30 }];
// Configuración del escritor CSVconst csvWriter = createCsvWriter({ path: 'products.csv', header: [ { id: 'id', title: 'ID' }, { id: 'product