zeusbart
1/4/2019 - 3:00 PM

generar csv desde json javascript

genera un csv desde un objeto java script

    function JSONToCSVConvertor(JSONData, ReportTitle) {
        //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 = '';
        var array_labels=[];
        //Set Report title in first row or line
        //This condition will generate the Label/Header
        CSV += ReportTitle + '\r\n\n';
        var row = "";
        //This loop will extract the label from 1st index of on array
        for (var i = 0; i < arrData.length; i++) {
            var j=0;
            for (var index in arrData[i]){
                j++
                var incluye = array_labels.includes(index);
                if(!incluye){
                    array_labels.splice(j, 0, index);
                }
            }
        }
        for (var i = 0; i < array_labels.length; i++) {
            //Now convert each value to string and comma-seprated
            row += array_labels[i] + ',';
        }
        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 j = 0; j < array_labels.length; j++) {
                if(arrData[i][array_labels[j]]==undefined){
                    row += '"' + 0 + '",';
                }else{
                    row += '"' + arrData[i][array_labels[j]] + '",';
                }

            }
            row.slice(0, row.length - 1);
            //add a line break after each row
            CSV += row + '\r\n';
        }
        if (CSV == '') {
            alert("Invalid data");
            return;
        }
        //Generate a file name
        var fileName = "MyReport_";
        //this will remove the blank-spaces from the title and replace it with an underscore
        fileName += ReportTitle.replace(/ /g,"_");
        //Initialize file format you want csv or xls
        var uri = 'data:text/csv;charset=utf-8,' + escape(CSV);
        // Now the little tricky part.
        // you can use either>> window.open(uri);
        // but this will not work in some browsers
        // or you will not get the correct file extension
        //this trick will generate a temp <a /> tag
        var link = document.createElement("a");
        link.href = uri;
        //set the visibility hidden so it will not effect on your web-layout
        link.style = "visibility:hidden";
        link.download = fileName + ".csv";
        //this part will append the anchor tag and remove it after automatic click
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    }