objects node convert array javascript json csv

node - javascript json to csv download



Cómo convertir JSON a formato CSV y almacenar en una variable (7)

Hay múltiples opciones disponibles para reutilizar las potentes bibliotecas existentes basadas en estándares.

Si usa D3 en su proyecto, simplemente puede invocar:

d3.csv.format o d3.csv.formatRows funciona para convertir una matriz de objetos en cadena csv.

d3.csv.formatRows le brinda un mayor control sobre qué propiedades se convierten a csv.

Consulte las páginas wiki de d3.csv.format y d3.csv.formatRows .

También hay otras bibliotecas disponibles como jquery-csv , PapaParse . Papa Parse no tiene dependencias, ni siquiera jQuery.

Para complementos basados ​​en jquery, verifique esto .

Tengo un enlace que abre datos json en el navegador, pero desafortunadamente no tengo ni idea de cómo leerlo. ¿Hay alguna forma de convertir estos datos mediante el formato javascript Comma Separate ( csv ) y guardarlo en una variable de javascript ? Acabo de empezar a aprender y no tengo absolutamente ninguna pista sobre json , sería genial si alguien pudiera escribir un guión para ello.

Los datos parecen:

{ "count": 2, "items": [{ "title": "Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)", "description": "Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China/u2019s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store/u2019s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone", "link": "http:////wik.io//info//US//309201303", "timestamp": 1326439500, "image": null, "embed": null, "language": null, "user": null, "user_image": null, "user_link": null, "user_id": null, "geo": null, "source": "wikio", "favicon": "http:////wikio.com//favicon.ico", "type": "blogs", "domain": "wik.io", "id": "2388575404943858468" }, { "title": "Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)", "description": "SHANGHAI /u2013 Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone", "link": "http:////wik.io//info//US//309198933", "timestamp": 1326439320, "image": null, "embed": null, "language": null, "user": null, "user_image": null, "user_link": null, "user_id": null, "geo": null, "source": "wikio", "favicon": "http:////wikio.com//favicon.ico", "type": "blogs", "domain": "wik.io", "id": "16209851193593872066" }] }

Lo más parecido que pude encontrar fue: convertir el formato JSON al formato CSV para MS Excel

Pero es descargas en un archivo CSV , lo almaceno en una variable, toda la información convertida.

También me gustaría saber cómo cambiar los caracteres de escape: ''/u2019'' vuelve a la normalidad.

Gracias por adelantado.

Intenté este código:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JSON to CSV</title> <script src="http://code.jquery.com/jquery-1.7.1.js" type="text/javascript"></script> <script type="text/javascript"> var json3 = { "count": 2, "items": [{ "title": "Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)", "description": "Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China’s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store’s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone", "link": "http://wik.io/info/US/309201303", "timestamp": 1326439500, "image": null, "embed": null, "language": null, "user": null, "user_image": null, "user_link": null, "user_id": null, "geo": null, "source": "wikio", "favicon": "http://wikio.com/favicon.ico", "type": "blogs", "domain": "wik.io", "id": "2388575404943858468" }, { "title": "Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)", "description": "SHANGHAI – Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone", "link": "http://wik.io/info/US/309198933", "timestamp": 1326439320, "image": null, "embed": null, "language": null, "user": null, "user_image": null, "user_link": null, "user_id": null, "geo": null, "source": "wikio", "favicon": "http://wikio.com/favicon.ico", "type": "blogs", "domain": "wik.io", "id": "16209851193593872066" } ] } //var objJson = JSON.parse(json3.items); DownloadJSON2CSV(json3.items); function DownloadJSON2CSV(objArray) { var array = typeof objArray != ''object'' ? JSON.parse(objArray) : objArray; var str = ''''; for (var i = 0; i < array.length; i++) { var line = ''''; for (var index in array[i]) { line += array[i][index] + '',''; } line.slice(0, line.Length - 1); str += line + ''/r/n''; } $(''div'').html(str); } </script> </head> <body> <div></div> </body> </html>

Pero parece que no funciona. ¿Puede ayudarme alguien, por favor?


Muy buena solución de praneybehl, pero si alguien quiere guardar los datos como un archivo csv y usar un método blob , entonces pueden referir esto:

function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) { //If JSONData is not an object then JSON.parse will parse the JSON string in an Object var arrData = typeof JSONData != ''object'' ? JSON.parse(JSONData) : JSONData; var CSV = ''''; //This condition will generate the Label/Header if (ShowLabel) { var row = ""; //This loop will extract the label from 1st index of on array for (var index in arrData[0]) { //Now convert each value to string and comma-seprated row += index + '',''; } row = row.slice(0, -1); //append Label row with line break CSV += row + ''/r/n''; } //1st loop is to extract each row for (var i = 0; i < arrData.length; i++) { var row = ""; //2nd loop will extract each column and convert it in string comma-seprated for (var index in arrData[i]) { row += ''"'' + arrData[i][index] + ''",''; } row.slice(0, row.length - 1); //add a line break after each row CSV += row + ''/r/n''; } if (CSV == '''') { alert("Invalid data"); return; } //this trick will generate a temp "a" tag var link = document.createElement("a"); link.id="lnkDwnldLnk"; //this part will append the anchor tag and remove it after automatic click document.body.appendChild(link); var csv = CSV; blob = new Blob([csv], { type: ''text/csv'' }); var csvUrl = window.webkitURL.createObjectURL(blob); var filename = ''UserExport.csv''; $("#lnkDwnldLnk") .attr({ ''download'': filename, ''href'': csvUrl }); $(''#lnkDwnldLnk'')[0].click(); document.body.removeChild(link); }


Ok, finalmente obtuve este código funcionando:

<html> <head> <title>Demo - Covnert JSON to CSV</title> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript" src="https://github.com/douglascrockford/JSON-js/raw/master/json2.js"></script> <script type="text/javascript"> // JSON to CSV Converter function ConvertToCSV(objArray) { var array = typeof objArray != ''object'' ? JSON.parse(objArray) : objArray; var str = ''''; for (var i = 0; i < array.length; i++) { var line = ''''; for (var index in array[i]) { if (line != '''') line += '','' line += array[i][index]; } str += line + ''/r/n''; } return str; } // Example $(document).ready(function () { // Create Object var items = [ { name: "Item 1", color: "Green", size: "X-Large" }, { name: "Item 2", color: "Green", size: "X-Large" }, { name: "Item 3", color: "Green", size: "X-Large" }]; // Convert Object to JSON var jsonObject = JSON.stringify(items); // Display JSON $(''#json'').text(jsonObject); // Convert JSON to CSV & Display CSV $(''#csv'').text(ConvertToCSV(jsonObject)); }); </script> </head> <body> <h1> JSON</h1> <pre id="json"></pre> <h1> CSV</h1> <pre id="csv"></pre> </body> </html>

Muchas gracias por todo el apoyo a todos los colaboradores.

Praney


Solo quería agregar aquí algún código para las personas en el futuro, ya que estaba tratando de exportar JSON a un documento CSV y descargarlo.

Uso $.getJSON para extraer datos json de una página externa, pero si tiene una matriz básica, puede usarla.

Esto usa el código de Christian Landgren para crear los datos de csv.

$(document).ready(function() { var JSONData = $.getJSON("GetJsonData.php", function(data) { var items = data; const replacer = (key, value) => value === null ? '''' : value; // specify how you want to handle null values here const header = Object.keys(items[0]); let csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join('','')); csv.unshift(header.join('','')); csv = csv.join(''/r/n''); //Download the file as CSV var downloadLink = document.createElement("a"); var blob = new Blob(["/ufeff", csv]); var url = URL.createObjectURL(blob); downloadLink.href = url; downloadLink.download = "DataDump.csv"; //Name the file here document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); }); });


Una forma más elegante de convertir json a csv es usar la función de mapa sin ningún marco:

var json = json3.items var fields = Object.keys(json[0]) var replacer = function(key, value) { return value === null ? '''' : value } var csv = json.map(function(row){ return fields.map(function(fieldName){ return JSON.stringify(row[fieldName], replacer) }).join('','') }) csv.unshift(fields.join('','')) // add header column console.log(csv.join(''/r/n''))

Salida:

title,description,link,timestamp,image,embed,language,user,user_image,user_link,user_id,geo,source,favicon,type,domain,id "Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)","Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China’s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store’s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone","http://wik.io/info/US/309201303","1326439500","","","","","","","","","wikio","http://wikio.com/favicon.ico","blogs","wik.io","2388575404943858468" "Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)","SHANGHAI – Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone","http://wik.io/info/US/309198933","1326439320","","","","","","","","","wikio","http://wikio.com/favicon.ico","blogs","wik.io","16209851193593872066"

Actualización de ES6 (2016)

Utilice esta sintaxis menos densa y también JSON.stringify para agregar comillas a las cadenas mientras mantiene los números sin comillas:

const items = json3.items const replacer = (key, value) => value === null ? '''' : value // specify how you want to handle null values here const header = Object.keys(items[0]) let csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join('','')) csv.unshift(header.join('','')) csv = csv.join(''/r/n'') console.log(csv)


Escribir Csv.

function writeToCsv(dataToWrite, callback) { var dataToWrite; var fs = require(''fs''); dataToWrite = convertToCSV(dataToWrite); fs.writeFile(''assets/distanceInfo.csv'', dataToWrite, ''utf8'', function (err) { if (err) { console.log(''Some error occured - file either not saved or corrupted file saved.''); } else{ console.log(''It/'s saved!''); } callback("data_saved | assets/distanceInfo.csv") }); } function convertToCSV(objArray) { var array = typeof objArray != ''object'' ? JSON.parse(objArray) : objArray; var str = ''''; for (var i = 0; i < array.length; i++) { var line = ''''; for (var index in array[i]) { if (line != '''') line += '','' line += array[i][index]; } str += line + ''/r/n''; } return str; }


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JSON to CSV</title> <script src="http://code.jquery.com/jquery-1.7.1.js" type="text/javascript"></script> </head> <body> <h1>This page does nothing....</h1> <script type="text/javascript"> var json3 = { "count": 2, "items": [{ "title": "Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)", "description": "Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China’s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store’s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone", "link": "http://wik.io/info/US/309201303", "timestamp": 1326439500, "image": null, "embed": null, "language": null, "user": null, "user_image": null, "user_link": null, "user_id": null, "geo": null, "source": "wikio", "favicon": "http://wikio.com/favicon.ico", "type": "blogs", "domain": "wik.io", "id": "2388575404943858468" }, { "title": "Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)", "description": "SHANGHAI – Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone", "link": "http://wik.io/info/US/309198933", "timestamp": 1326439320, "image": null, "embed": null, "language": null, "user": null, "user_image": null, "user_link": null, "user_id": null, "geo": null, "source": "wikio", "favicon": "http://wikio.com/favicon.ico", "type": "blogs", "domain": "wik.io", "id": "16209851193593872066" } ] }; const items = json3.items const replacer = (key, value) => value === null ? '''' : value // specify how you want to handle null values here const header = Object.keys(items[0]) let csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join('','')) csv.unshift(header.join('','')) csv = csv.join(''/r/n'') var link = document.createElement("a"); link.id="lnkDwnldLnk"; document.body.appendChild(link); blob = new Blob([csv], { type: ''text/csv'' }); var csvUrl = window.webkitURL.createObjectURL(blob); var filename = ''UserExport.csv''; jQuery("#lnkDwnldLnk") .attr({ ''download'': filename, ''href'': csvUrl }); jQuery(''#lnkDwnldLnk'')[0].click(); document.body.removeChild(link); </script> </body> </html>