Ok Orlando - CSV Line Parser

As part of my getting familiar with some of the new features of Orlando, I wanted to dive into the new CSVParser class.

Why might I use this?

So in looking for use-case I found a community post by Vinod. He has a csv file that he needs to parse. Good enough for me. Ankur Bawiskar proposed a solution, but it’s using some Packages call, that is not supported in scopes. With that lets dig in.

I am using the Library survey from 2011 data and I’m planning to write that to an import table, then to that could be used to update Locations.

// Original solution
var sa = new GlideSysAttachment();
var bytesContent = sa.getBytes("incident", "bdd212d04fbf7340fc11fa218110c7d5");
var strData = String(Packages.java.lang.String(bytesContent));

Lets try this with CSVParser.

Oofta. So Below is my “working” example. A few important notes;

  1. parseLineToObject needs the array for the headers.
  2. If your CSV is mixed with quotes and without, you’re going to have to correct that, like I did.
// to object
var attachment = new GlideSysAttachment();
var agr = attachment.getAttachments('incident', '552c48888c033300964f4932b03eb092');
while (agr.next()) {
    var content = attachment.getContent(agr);
    var contentb64 = attachment.getContentBase64(agr);
    gs.info('content.length: ' + content.length);
    // CSV Parser splits the data up
    var contentArr = content.split('\n');
    var headers = [
    // with out this, the call fails;
    // now if you csv is not formed consistently this still fails.... so im just going to remove ,'s in quotes, then quotes.
    contentArr.forEach(function (line) {
        // regex to remove commas from within `"` parts e.g. a,b,"test,test./#&"
        var regex = /"([A-Z0-9\s\.#-\/&]+),([A-Z0-9\s\.#-\/&]+)"/gm;
        var subst = "$1$2";
        line = line.replace(regex, subst);
        // regex to remove comma from within " at the end e.g. a,b,"test,"
        var regex2 = /"([A-Z0-9\s\.#-\/&]+),"/gm;
        var subst2 = "$1";
        line = line.replace(regex2, subst2);
        var delimiter = ',';
        var quoteCharacter = '';
        try {
            var lineObj = new sn_impex.CSVParser().parseLineToObject(line, headers, delimiter, quoteCharacter);
            if (lineObj.STABR == "MN" && lineObj.CITY == "MINNEAPOLIS") {
                gs.info(JSON.stringify(lineObj, '', '  '));
                /*do what you want here... like make a record or whatever*/
        } catch (e) {



Here’s what the output looks like;

Source: https://docs.servicenow.com/bundle/orlando-application-development/page/app-store/dev_portal/API_reference/CSVParserScoped/concept/CSVParserScopedAPI.html

Edit this page

Jace Benson
ServiceNow Developer

ServiceNow is my day job, JAMStack is my passion.