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.