简体   繁体   中英

how to convert csv array object into json using javascript

data = [ 'Txn Date,"Value\rDate",Description,"Ref No./Cheque\rNo.",Debit,Credit,Balance',
  '1 Jan 2015,1 Jan 2015,"BY TRANSFER-\rNEFT*SCBL0036001*NB20501\r501011778*MR SELVAKUMAR\rAR-","TRANSFER\rFROM\r3199677044304",,"65,000.00","7,77,065.65"'
  ]

want to convert the above data format into json format .To do so i am using a split function ie split(","); but i have double values that contains ",".

function csvJSON( tabledata){

    var lines = tabledata;//csv.split("\n");

    var result = [];

    var headers=lines[0].split(",");

    for(var i=1;i<lines.length;i++){

        var obj = {};



        var currentline = lines[i].split(",");


        for(var j=0;j<headers.length;j++){


                obj[headers[j]] = currentline[j];



        }

        result.push(obj);

    }

    return JSON.stringify(result); //JSON
}

this is what I am getting ,

{ 'Txn Date': '1 Jan 2015',
        '"Value\rDate"': '1 Jan 2015',
        Description: '"BY TRANSFER-\rNEFT*SCBL0036001*NB20501\r501011778*MR SELVAKUMAR\rAR-"',
        '"Ref No./Cheque\rNo."': '"TRANSFER\rFROM\r3199677044304"',
        Debit: '',
        Credit: '"65',
        Balance: '000.00"' }

And expected output:

{ 'Txn Date': '1 Jan 2015',
        '"Value\rDate"': '1 Jan 2015',
        Description: '"BY TRANSFER-\rNEFT*SCBL0036001*NB20501\r501011778*MR SELVAKUMAR\rAR-"',
        '"Ref No./Cheque\rNo."': '"TRANSFER\rFROM\r3199677044304"',
        Debit: '',
        Credit: '65,000.00',
        Balance: '7,77,065.65' }

how to solve this problem ,any help will be appreciated.

You can use this function to parse the csv CSVToArray() .

    function CSVToArray( strData, strDelimiter ){
        // Check to see if the delimiter is defined. If not,
        // then default to comma.
        strDelimiter = (strDelimiter || ",");

        // Create a regular expression to parse the CSV values.
        var objPattern = new RegExp(
            (
                // Delimiters.
                "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +

                // Quoted fields.
                "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +

                // Standard fields.
                "([^\"\\" + strDelimiter + "\\r\\n]*))"
            ),
            "gi"
            );


        // Create an array to hold our data. Give the array
        // a default empty first row.
        var arrData = [[]];

        // Create an array to hold our individual pattern
        // matching groups.
        var arrMatches = null;


        // Keep looping over the regular expression matches
        // until we can no longer find a match.
        while (arrMatches = objPattern.exec( strData )){

            // Get the delimiter that was found.
            var strMatchedDelimiter = arrMatches[ 1 ];

            // Check to see if the given delimiter has a length
            // (is not the start of string) and if it matches
            // field delimiter. If id does not, then we know
            // that this delimiter is a row delimiter.
            if (
                strMatchedDelimiter.length &&
                strMatchedDelimiter !== strDelimiter
                ){

                // Since we have reached a new row of data,
                // add an empty row to our data array.
                arrData.push( [] );

            }

            var strMatchedValue;

            // Now that we have our delimiter out of the way,
            // let's check to see which kind of value we
            // captured (quoted or unquoted).
            if (arrMatches[ 2 ]){

                // We found a quoted value. When we capture
                // this value, unescape any double quotes.
                strMatchedValue = arrMatches[ 2 ].replace(
                    new RegExp( "\"\"", "g" ),
                    "\""
                    );

            } else {

                // We found a non-quoted value.
                strMatchedValue = arrMatches[ 3 ];

            }


            // Now that we have our value string, let's add
            // it to the data array.
            arrData[ arrData.length - 1 ].push( strMatchedValue );
        }

        // Return the parsed data.
        return( arrData );
    }

after that you only have to save the json

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM