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);
    }

})();