CSV to JSON Converter

HTML
<!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>CSV to JSON</title> </head> <body> <h1 id="heading" class="text-center">CSV to JSON Converter</h1> <hr /> <p>Paste Your CSV Here:</p> <textarea rows="10" cols="20" id="csv" class="form-control">"Id","UserName" "1","Sam Smith" "2","Fred Frankly" "1","Zachary Zupers"</textarea> <br /> <button class="btn btn-success" id="convert">Convert to JSON</button>    <button class="btn btn-warning" id="download">Download JSON</button> <textarea rows="10" cols="20" id="json" class="form-control"></textarea> </body> </html>
CSS
.small { font-size: small; }
JAVASCRIPT
// Source: http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm // This will parse a delimited string into an array of // arrays. The default delimiter is the comma, but this // can be overriden in the second argument. 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([]); } // 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. var strMatchedValue = arrMatches[2].replace( new RegExp("\"\"", "g"), "\""); } else { // We found a non-quoted value. var 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); } function CSV2JSON(csv) { var array = CSVToArray(csv); var objArray = []; for (var i = 1; i < array.length; i++) { objArray[i - 1] = {}; for (var k = 0; k < array[0].length && k < array[i].length; k++) { var key = array[0][k]; objArray[i - 1][key] = array[i][k] } } var json = JSON.stringify(objArray); var str = json.replace(/},/g, "},\r\n"); return str; } $("#convert").click(function() { var csv = $("#csv").val(); var json = CSV2JSON(csv); $("#json").val(json); }); $("#download").click(function() { var csv = $("#csv").val(); var json = CSV2JSON(csv); window.open("data:text/json;charset=utf-8," + escape(json)) });
Expand for more options Login