CSVReader makes it easy to parse out raw strings that contain CSV-formatted data. CSV parsing can be deceptively difficult once you start getting into edge cases around commas, quotes, line breaks, etc, so this is a handy class to have around when you’re reading CSV data from External Systems.

The source code for this class is an adaptation of an open-source library from Marty Chang.


global static List<List<String>> readCSVData(String rawData); // defaults to using \n as the line ending character

global static List<List<String>> readCSVData(String rawData, String lineEnding);

Example Usage

// parse the response
List<List<String>> rows = valence.CSVReader.readCSVData(apiResponseBody);

// extract headers from first line of CSV data
List<String> headers = rows[0];

List<valence.RecordInFlight> records = new List<valence.RecordInFlight>();

// iterate over response records and create RecordInFlight instances from them
for(Integer i = 1, j = rows.size(); i < j; i++) { // deliberately start with i = 1 to skip the header row

        Map<String, Object> properties = new Map<String, Object>();

        for(Integer k = 0, l = headers.size(); k < l; k++) {
                properties.put(headers[k], rows[i][k]);

        records.add(new valence.RecordInFlight(properties));