function _csvRowToArray(csv) { const csvRegex = /,(?=(?:(?:[^"]*"){2})*[^"]*$)/ const trimQuotes = /^"|"$/g return csv.split(csvRegex).map(h => h.trim().replace(trimQuotes, '')) } function _csvRowToObject(headers, row) { let currentRow = _csvRowToArray(row) return Object.fromEntries(headers.map((header, i) => [header, currentRow[i]])) } function csvToJSON(csv) { const [headersRow, ...rows] = csv.split('\n') let headers = _csvRowToArray(headersRow) return rows.map(row => _csvRowToObject(headers, row)) } let csv = `Name, Age, City John, 21, New York "Jane, Doe", 22, San Francisco Jim, 23, Chicago "Jill Chill", 24, "Tacoma, Seattle"` console.log(csvToJSON(csv))