Saltar al contenido

Cómo convertir JSON array a CSV usando Node.js?

Este artículo fue probado por especialistas para que tengas la seguridad de la veracidad de este artículo.

Solución:

Hágalo usted mismo así:

'use strict';

var fs = require('fs');

let myObj = 
  "rows": [
    [
      "New , Visitor",
      "(not set)",
      "(not set)",
      "0"
    ],
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "mobile"
    ],
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "mobile"
    ],
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "mobile",
    ]
  ]


// 1. One way - if you want the results to be in double quotes and you have comas inside

// choose another string to temporally replace commas if necessary
let stringToReplaceComas = '!!!!';

myObj.rows.map((singleRow) => 
  singleRow.map((value, index) => 
    singleRow[index] = value.replace(/,/g, stringToReplaceComas);
  )
)

let csv = `"$myObj.rows.join('"n"').replace(/,/g, '","')"`;
// // or like this
// let csv = `"$myObj.rows.join('"n"').split(',').join('","')"`;

csv = csv.replace(new RegExp(`$stringToReplaceComas`, 'g'), ',');

// // 2. Another way - if you don't need the double quotes in the generated csv and you don't have comas in rows' values
// let csv = myObj.rows.join('n')

fs.writeFile('name.csv', csv, 'utf8', function(err) 
  if (err) 
    console.log('Some error occured - file either not saved or corrupted file saved.');
   else 
    console.log('It's saved!');
  
);

Usar bibliotecas

ex. https://github.com/mrodrig/json-2-csv, https://github.com/wdavidw/node-csv, https://github.com/wdavidw/node-csv-stringify

un ejemplo usando json-2-csv (https://github.com/mrodrig/json-2-csv)

'use strict';

const converter = require('json-2-csv');

let myObj = 
  "rows": [
    
      value1: "New Visitor",
      value2: "(not set)",
      value3: "(not set)",
      value4: "0"
    ,
    
      value1: "New Visitor",
      value2: "(not set)",
      value3: "(not set)",
      value4: "mobile"
    ,
    
      value1: "New Visitor",
      value2: "(not set)",
      value3: "(not set)",
      value4: "mobile"
    ,
    
      value1: "New Visitor",
      value2: "(not set)",
      value3: "(not set)",
      value4: "mobile",
    
  ]


let json2csvCallback = function (err, csv) 
    if (err) throw err;
    fs.writeFile('name.csv', csv, 'utf8', function(err) 
      if (err) 
        console.log('Some error occured - file either not saved or corrupted file saved.');
       else 
        console.log('It's saved!');
      
    );
;

converter.json2csv(myObj.rows, json2csvCallback, 
  prependHeader: false      // removes the generated header of "value1,value2,value3,value4" (in case you don't want it)
);

un ejemplo usando csv-stringify (https://github.com/wdavidw/node-csv-stringify)

'use strict';

var stringify = require('csv-stringify');
var fs = require('fs');

let myObj = 
  "rows": [
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "0"
    ],
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "mobile"
    ],
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "mobile"
    ],
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "mobile",
    ]
  ]


stringify(myObj.rows, function(err, output) 
  fs.writeFile('name.csv', output, 'utf8', function(err) 
    if (err) 
      console.log('Some error occured - file either not saved or corrupted file saved.');
     else 
      console.log('It's saved!');
    
  );
);

Tres sencillos pasos: Leer. Convertir. Escribir.

Paso 1: leer.

Si necesita leer el JSON de un archivo (como lo indica su inclusión del nombre del archivo response.json en su publicación), necesitará la API del sistema de archivos Node.js:

const fs = require('fs');                          // Require Node.js FileSystem API.
const JSONFile = fs.readFileSync('response.json'); // Read the file synchronously.

Nota: Si lo prefiere, puede leer el archivo de forma asincrónica con fs.readFile() y realizar la conversión en una función de devolución de llamada.

Paso 2: convertir.

Ya sea que lea su JSON de un archivo local o lo OBTENGA de un servidor, primero deberá analizarlo en un Objeto JavaScript antiguo simple usando el JSON.parse método:

const JSONasPOJO = JSON.parse(JSONFile); // Parse JSON into POJO.

Luego realice una serie de combinaciones en las matrices secundarias y las matrices array:
VER EDITAR DEBAJO

/* THIS IS UNNECESSARY FOR "COMMA" SEPARATED VALUES
const CSVString = JSONasPOJO
    .rows                    // Get `rows`, which is an array.
    .map(                    // Map returns a new array.
        row => row.join(',') // Each child array becomes a comma-separated string.  
     )                    
    .join('n');             // Parent array becomes a newline-separated string...
                             // ...of comma-separated strings.
                             // It is now a single CSV string!
*/

EDITAR:

Si bien el código anterior ciertamente funciona, es innecesario usar .map y .join en las matrices secundarias. Como demuestra @Relu, un solo .join en el padre array es suficiente porque JavaScript convertirá automáticamente las matrices secundarias en cadenas separadas por comas de forma predeterminada, ya que .join debe devolver un string y no puede contener matrices secundarias.

Puede usar el patrón anterior si desea unir las matrices secundarias con algo que no sea una coma.

De lo contrario:

var CSVString = JSONasPOJO.rows.join('n'); // Array becomes a newline-separated...
                                            // ...string of comma-separated strings.
                                            // It is now a single CSV string!

Aquí, podemos ver esa conversión en acción:

const JSONasPOJO = 
  "rows": [
    [
      "New Visitor",
      "(not set)",
      "(not set)",      
      "0"
    ],
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "mobile"      
    ],
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "mobile"    
    ],
    [
      "New Visitor",
      "(not set)",
      "(not set)",
      "mobile" // NOTE: Here I removed a trailing comma,
               // ...which is invalid JSON!
    ]
  ]


const CSVString = JSONasPOJO.rows.join('n');

console.log(CSVString);

Paso 3: Escribe.

Usando la API FileSystem nuevamente, escriba en un archivo y registre un error o un mensaje de éxito:

fs.writeFile('name.csv', CSVString, err => 
    if (err) return console.log(err);
    console.log('FILE SUCCESSFULLY WRITTEN!n');
);

Nota: Aquí, demuestro el patrón asincrónico usando una devolución de llamada para registrar mis mensajes de error y éxito. Si lo prefiere, puede escribir el archivo sincrónicamente con fs.writeFileSync().

Poniendolo todo junto

Me gusta agregar un montón de console.log() mensajes a mis scripts de Node.js.

const fs = require('fs');

const inFilename  = 'response.json',
      outFilename = 'name.csv';

console.log(`Preparing to read from $inFilename …`);

const JSONContents = fs.readFileSync(inFilename);

console.log(`READ:n$JSONContents`);
console.log('Preparing to parse as JSON …');

const JSONasPOJO = JSON.parse(JSONContents);

console.log(`PARSED:n$JSONasPOJO`);
console.log('Preparing to convert into CSV …');

const CSVString = JSONasPOJO.rows.join('n');

console.log(`CONVERTED:n$CSVString`);
console.log(`Preparing to write to $outFilename …`);

fs.writeFile(outFilename, CSVString, err => 
    if (err) return console.error(err);
    console.log('FILE SUCCESSFULLY WRITTEN!');
);

Si conservas alguna cuestión y forma de reformar nuestro noticia eres capaz de ejecutar una interpretación y con deseo lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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