¿Cómo convertir un archivo CSV a JSON con valores separados por comas en Node.js?

Un CSV es un archivo de valores separados por comas con extensión .csv, que permite guardar datos en un formato tabular. Aquí hay un artículo para convertir los datos de un archivo csv a una notación de objetos de JavaScript (JSON ) sin usar ningún paquete npm de terceros. La principal diferencia con respecto a la conversión normal es que los valores de cualquier fila pueden estar separados por comas y, como sabemos, las diferentes columnas también están separadas por comas.

En este enfoque, ingresaremos el contenido del archivo CSV en una array y dividiremos el contenido de la array en función de un delimitador. Todas las filas del CSV se convertirán en objetos JSON que se agregarán a la array resultante que luego se convertirá a JSON y se generará un archivo de salida JSON correspondiente.

Enfoque: 
siga los pasos a continuación para lograr la solución: 
 

  1. Lea el archivo csv usando el paquete fs npm predeterminado.
  2. Convierta los datos a String y divídalos en una array.
  3. Genere una array de encabezados.
  4. Para todas las filas n-1 restantes, haga lo siguiente: 
    • Cree un objeto vacío para agregarle valores de la fila actual.
    • Declare una string str como valor de array actual para cambiar el delimitador y almacenar la string generada en una nueva string s.
    • Si encontramos comillas de apertura («), mantenemos las comas como están; de lo contrario, las reemplazamos con la tubería «|»
    • Siga agregando los caracteres que atravesamos a un String s.
    • Divida la string usando el delimitador de tubería | y almacene los valores en una array de propiedades.
    • Para cada encabezado, si el valor contiene varios datos separados por comas, lo almacenamos en forma de array; de lo contrario, se almacena directamente el valor.
    • Agregue el objeto generado a nuestra array de resultados.
  5. Convierta la array resultante a json y genere el archivo de salida JSON.

Nombre de archivo: app.js 
 

javascript

// Reading the file using default
// fs npm package
const fs = require("fs");
csv = fs.readFileSync("CSV_file.csv")
 
// Convert the data to String and
// split it in an array
var array = csv.toString().split("\r");
 
// All the rows of the CSV will be
// converted to JSON objects which
// will be added to result in an array
let result = [];
 
// The array[0] contains all the
// header columns so we store them
// in headers array
let headers = array[0].split(", ")
 
// Since headers are separated, we
// need to traverse remaining n-1 rows.
for (let i = 1; i < array.length - 1; i++) {
  let obj = {}
 
  // Create an empty object to later add
  // values of the current row to it
  // Declare string str as current array
  // value to change the delimiter and
  // store the generated string in a new
  // string s
  let str = array[i]
  let s = ''
 
  // By Default, we get the comma separated
  // values of a cell in quotes " " so we
  // use flag to keep track of quotes and
  // split the string accordingly
  // If we encounter opening quote (")
  // then we keep commas as it is otherwise
  // we replace them with pipe |
  // We keep adding the characters we
  // traverse to a String s
  let flag = 0
  for (let ch of str) {
    if (ch === '"' && flag === 0) {
      flag = 1
    }
    else if (ch === '"' && flag == 1) flag = 0
    if (ch === ', ' && flag === 0) ch = '|'
    if (ch !== '"') s += ch
  }
 
  // Split the string using pipe delimiter |
  // and store the values in a properties array
  let properties = s.split("|")
 
  // For each header, if the value contains
  // multiple comma separated data, then we
  // store it in the form of array otherwise
  // directly the value is stored
  for (let j in headers) {
    if (properties[j].includes(", ")) {
      obj[headers[j]] = properties[j]
        .split(", ").map(item => item.trim())
    }
    else obj[headers[j]] = properties[j]
  }
 
  // Add the generated object to our
  // result array
  result.push(obj)
}
 
// Convert the resultant array to json and
// generate the JSON output file.
let json = JSON.stringify(result);
fs.writeFileSync('output.json', json);

Aporte:

Ejecute el comando «node app.js» en la terminal para ejecutar el programa.

Producción:

Se crea el archivo output.json y el contenido del archivo se ha registrado en el terminal.

Publicación traducida automáticamente

Artículo escrito por karankc27 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *