Skip to content

Instantly share code, notes, and snippets.

@vuongbui229
Forked from rakeden/csv-to-json-parser.js
Created September 17, 2020 10:15
Show Gist options
  • Select an option

  • Save vuongbui229/131b4fe6a51345d4b1dc63b9eff37fe8 to your computer and use it in GitHub Desktop.

Select an option

Save vuongbui229/131b4fe6a51345d4b1dc63b9eff37fe8 to your computer and use it in GitHub Desktop.

Revisions

  1. @rakeden rakeden revised this gist May 12, 2018. No changes.
  2. @rakeden rakeden created this gist May 12, 2018.
    82 changes: 82 additions & 0 deletions csv-to-json-parser.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,82 @@
    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);
    }