Array.prototype.slice()
and Array.prototype.indexOf('\n')
and String.prototype.split(delimiter)
to separate the first row (title row) into values.String.prototype.split('\n')
to create a string for each row, then Array.prototype.map()
and String.prototype.split(delimiter)
to separate the values in each row.Array.prototype.reduce()
to create an object for each row's values, with the keys parsed from the title row.delimiter
, to use a default delimiter of ,
.const CSVToJSON = (data, delimiter = ',') => { const titles = data.slice(0, data.indexOf('\n')).split(delimiter); return data .slice(data.indexOf('\n') + 1) .split('\n') .map(v => { const values = v.split(delimiter); return titles.reduce( (obj, title, index) => ((obj[title] = values[index]), obj), {} ); }); };
CSVToJSON('col1,col2\na,b\nc,d'); // [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}]; CSVToJSON('col1;col2\na;b\nc;d', ';'); // [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}];
Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️