Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to access JSON array object in server-side script?

Kenneth3
Tera Guru

Hi,

I have the following (JSON) array of objects and code (which I get from a REST API - see first block) and want to access / iterate through those items, but I am encountering some issues (see second block).

The gs.info(objComputer); gives the output: [object Object] and the gs.info('Object count: ' + objComputer.length); gives the output: Object count: undefined.

var computer = {"computer":[{"Body":{"BiosSerialNumber":"3b200898-6811-3240-a99d-9199181bf627","Manufacturer":"IBM","Name":"vmw0124"}},{"Body":{"BiosSerialNumber":"925a33b5-f18c-39ca-860d-fdecaba9f150","Manufacturer":"IBM","Name":"vmw0125"}}]};

var strComputer = JSON.stringify(computer, null, 2);  // Convert outputs to string
gs.info('String count: ' + strComputer.length);
gs.info(strComputer);

var objComputer = JSON.parse(strComputer);  // Convert outputs string to an object
gs.info(objComputer);
gs.info('Object count: ' + objComputer.length);

for (var i = 0; i < objComputer.length; i++) {
    gs.info('Record - ' + i);
    gs.info(computer[i].Name);
    gs.info(computer[i].BiosSerialNumber);
}

 

*** Script: String count: 346
*** Script: {
  "computer": [
    {
      "Body": {
        "BiosSerialNumber": "3b200898-6811-3240-a99d-9199181bf627",
        "Manufacturer": "IBM",
        "Name": "vmw0124"
      }
    },
    {
      "Body": {
        "BiosSerialNumber": "925a33b5-f18c-39ca-860d-fdecaba9f150",
        "Manufacturer": "IBM",
        "Name": "vmw0125"
      }
    }
  ]
}
*** Script: [object Object]
*** Script: Object count: undefined


What is the correct way to access and loop through the data?


Best regards

6 REPLIES 6

Hi Ankur and others,

When trying the following code in Scripts-Background, it is still giving an error. Any ideas?

(function() {

    try {
        var inputs = {};
        inputs['skip'] = 0; // Integer
        inputs['top'] = 5; // Integer

        // Execute Synchronously: Run in foreground. Code snippet has access to outputs.
        var result = sn_fd.FlowAPI.getRunner().action('global.snow').inForeground().withInputs(inputs).run();
        var outputs = result.getOutputs();

        // Get Outputs:
        var str = outputs['computer']; // Array.Object

        var parsedData = JSON.parse(str);  // Convert outputs string to an object
        gs.info('Object count: ' + parsedData.computer.length);

        for (var i = 0; i < parsedData.computer.length; i++) {
            gs.info(parsedData.computer[i].Body.Name);
            gs.info(parsedData.computer[i].Body.BiosSerialNumber);
        }

    } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
    }

})();

 

Error:

image

try this

(function() {

    try {
        var inputs = {};
        inputs['skip'] = 0; // Integer
        inputs['top'] = 5; // Integer

        // Execute Synchronously: Run in foreground. Code snippet has access to outputs.
        var result = sn_fd.FlowAPI.getRunner().action('global.snow').inForeground().withInputs(inputs).run();
        var outputs = result.getOutputs();

        // Get Outputs:
        var str = outputs['computer']; // Array.Object

        var parsedData = JSON.parse(str);  // Convert outputs string to an object
        gs.info('Object count: ' + parsedData.length);

        for (var i = 0; i < parsedData.length; i++) {
            gs.info(parsedData[i].Body.Name);
            gs.info(parsedData[i].Body.BiosSerialNumber);
        }

    } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
    }

})();