Como converter JSON para o formato CSV e armazenar em uma variável

Eu tenho um link que abre dados json no broswer, mas infelizmente não tenho idéia de como lê-lo. Existe uma maneira de converter esses dados usando o formato javascript Comma Separate ( csv ) e salvá-lo em uma variável javascript . Acabei de começar a aprender e não tenho absolutamente nenhuma pista sobre json , seria ótimo se alguém pudesse escrever um roteiro para isso.

Os dados parecem:

{ "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" }] } 

O mais próximo que pude encontrar foi: Converter formato JSON para o formato CSV para o MS Excel

Mas é downloads em um arquivo CSV , eu armazeno em uma variável, todos os dados convertidos.

Também gostaria de saber como alterar os caracteres de escape: '\u2019' volta ao normal.

Desde já, obrigado.


Eu tentei este código:

    JSON to CSV   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); }    

Mas isso não parece funcionar. Alguém pode ajudar por favor?

Uma maneira mais elegante de converter json para csv é usar a function map sem nenhum framework:

 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')) 

Saída:

 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" 

Atualizar ES6 (2016)

Use esta syntax menos densa e também JSON.stringify para adicionar aspas às cadeias de caracteres, mantendo os números sem aspas:

 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) 

Ok, finalmente consegui esse código funcionando:

   Demo - Covnert JSON to CSV      

JSON


CSV


Muito obrigado por todo o apoio a todos os contribuidores.

Praney

Muito boa solução por praneybehl, mas se alguém quiser salvar os dados como um arquivo csv e usando um método de blob , então eles podem se referir a isto:

 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); } 

Existem várias opções disponíveis para reutilizar as poderosas bibliotecas existentes baseadas em padrões.

Se acontecer de você usar o D3 no seu projeto, você pode simplesmente invocar:

d3.csv.format ou d3.csv.formatRows para converter uma matriz de objects em uma string csv.

d3.csv.formatRows oferece maior controle sobre quais propriedades são convertidas em csv.

Por favor, consulte as páginas wiki d3.csv.format e d3.csv.formatRows .

Existem outras bibliotecas disponíveis também como jquery-csv , PapaParse . O Papa Parse não tem dependencies – nem mesmo o jQuery.

Para plugins baseados em jquery, por favor verifique isso .

Eu só queria adicionar algum código aqui para as pessoas no futuro, já que eu estava tentando exportar o JSON para um documento CSV e baixá-lo.

Eu uso $.getJSON para puxar dados json de uma página externa, mas se você tem uma matriz básica, você pode usar isso.

Isso usa o código de Christian Landgren para criar os dados 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); }); }); 
    JSON to CSV    

This page does nothing....

Escreva 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; }