Los archivos CSV son un formato de archivo común que se utiliza para almacenar datos en forma de tabla. Pueden ser particularmente útiles cuando un usuario tiene la intención de descargar información estructurada de una manera que pueda abrir y leer fácilmente en su máquina local. Los archivos CSV son ideales para esto debido a su portabilidad y universalidad.
En este artículo, explicaremos cómo convertir objetos JavaScript JSON al formato de archivo CSV y viceversa. Este código no utiliza bibliotecas externas y, por lo tanto, funciona tanto en el navegador como en Node.js.
Conversión de JSON a CSV
Para convertir de JSON a CSV, primero debemos identificar los encabezados del archivo CSV. Para hacer esto, obtengamos una lista de claves presentes en cada uno de los objetos de JavaScript que se han pasado. Para obtener esta lista de claves, use el método `Object.keys()`.
Javascript
<script> const JSONToCSV = (objArray, keys) => { let csv = keys.join(','); objArray.forEach((row) => { let values = []; keys.forEach((key) => { values.push(row[key] || ''); }); csv += '\n' + values.join(','); }); return csv; }; const exampleJSON = [ { "date": 20210307, "positives": 28756184, "fatalities": 515148 }, { "date": 20210306, "positives": 28714654, "fatalities": 514309 }, { "date": 20210305, "positives": 28654639, "fatalities": 512629 }, { "date": 20210304, "positives": 28585852, "fatalities": 510408 }, { "date": 20210303, "positives": 28520365, "fatalities": 508665 }, { "date": 20210302, "positives": 28453529, "fatalities": 506216 }, { "date": 20210301, "positives": 28399281, "fatalities": 504488 } ]; console.log(JSONToCSV(exampleJSON, ['date', 'positives', 'fatalities'])); </script>
Este código se puede simplificar a:
Javascript
<script> const JSONToCSV = (objArray, keys) => [ keys.join(','), ...objArray.map( row => keys.map(k => row[k] || '') .join(','))].join('\n'); const exampleJSON = [ { "date": 20210307, "positives": 28756184, "fatalities": 515148 }, { "date": 20210306, "positives": 28714654, "fatalities": 514309 }, { "date": 20210305, "positives": 28654639, "fatalities": 512629 }, { "date": 20210304, "positives": 28585852, "fatalities": 510408 }, { "date": 20210303, "positives": 28520365, "fatalities": 508665 }, { "date": 20210302, "positives": 28453529, "fatalities": 506216 }, { "date": 20210301, "positives": 28399281, "fatalities": 504488 } ]; console.log(JSONToCSV(exampleJSON, ['date', 'positives', 'fatalities'])); </script>
Producción:
date, positives, fatalities 20210307, 28756184, 515148 20210306, 28714654, 514309 20210305, 28654639, 512629 20210304, 28585852, 510408 20210303, 28520365, 508665 20210302, 28453529, 506216 20210301, 28399281, 504488
Conversión de CSV a JSON
Para convertir de CSV a JSON, primero identifique una lista de claves para cada objeto de JavaScript analizando los encabezados de CSV, luego agregue cada clave y valor a un nuevo objeto para cada fila de CSV.
Javascript
<script> const CSVToJSON = csv => { const lines = csv.split('\n'); const keys = lines[0].split(','); return lines.slice(1).map(line => { return line.split(',').reduce((acc, cur, i) => { const toAdd = {}; toAdd[keys[i]] = cur; return { ...acc, ...toAdd }; }, {}); }); }; const exampleCSV = ` date,positives,fatalities 20210307,28756184,515148 20210306,28714654,514309 20210305,28654639,512629 20210304,28585852,510408 20210303,28520365,508665 20210302,28453529,506216 20210301,28399281,504488`; console.log(CSVToJSON(exampleCSV)); </script>
Producción: