how to parse values from JSON response?

Ganesh65
Tera Expert

in present case getting message log "0".

initially used JSON.parse but its giving Objectobject error so then used stringify. Json response is attached. in JSON response id and all other required data is under DATA .

try {
    var r = new sn_ws.RESTMessageV2('Rapid7 Vulnerabilities', 'Default GET');

    //override authentication profile 
    //authentication type ='basic'/ 'oauth2'
    //r.setAuthenticationProfile(authentication type, profile name);

    //set a MID server name if one wants to run the message on MID
    //r.setMIDServer('MY_MID_SERVER');

    //if the message is configured to communicate through ECC queue, either
    //by setting a MID server or calling executeAsync, one needs to set skip_sensor
    //to true. Otherwise, one may get an intermittent error that the response body is null
    //r.setEccParameter('skip_sensor', true);

    var response = r.execute();
    var responseBody = response.getBody();
    var httpStatus = response.getStatusCode();

   // gs.log("parsing data" + responseBody);
    var vuls = JSON.stringify(responseBody);
	//gs.log("vulnerabilities are " + vuls);
    for (i = 0; i < vuls.length; i++) {
        //gs.log("vul id iss " + vuls.data.plannedEvents[i].id);
		gs.log("Vulnerability id's are " +vuls.data[0].items[0].id);
		
    }
} catch (ex) {
    var message = ex.message;
}
1 ACCEPTED SOLUTION

Ganesh65
Tera Expert

Hi all, please find below scheduled job script to parse data from json file to update table in servicenow. This code works fine in my instance.

try {
    var r = new sn_ws.RESTMessageV2('Rapid7 Vulnerabilities', 'Default GET');

    //override authentication profile 
    //authentication type ='basic'/ 'oauth2'
    //r.setAuthenticationProfile(authentication type, profile name);

    //set a MID server name if one wants to run the message on MID
    //r.setMIDServer('MY_MID_SERVER');

    //if the message is configured to communicate through ECC queue, either
    //by setting a MID server or calling executeAsync, one needs to set skip_sensor
    //to true. Otherwise, one may get an intermittent error that the response body is null
    //r.setEccParameter('skip_sensor', true);

    var response = r.execute();
    var responseBody = response.getBody();
    var httpStatus = response.getStatusCode();

    var vuls = JSON.parse(responseBody);
    var mainvuls = vuls.data;
   
    for (i = 0; i < mainvuls.length; i++) {
      
        gs.log(mainvuls.length + 
			   "\n" + "Vulnerability Id is " + "  "+ mainvuls[i].id + 
			   "\n"+ "Vulnerability Severity is " + "  "+ mainvuls[i].severity + 
			   "\n" + "Vulnerability Status is " + "  "+mainvuls[i].status + 
			   "\n" + "Vulnerability Score is " + "  " +mainvuls[i].vulnerability_score + 
			   "\n" + "Vulnerability root cause URL is " + "  " +mainvuls[i].root_cause.url +
			   "\n" + "Vulnerability variance id is " + "  " +mainvuls[i].variances[0].id + 
			   "\n" + "Vulnerability Attack id is " + "  " +mainvuls[i].variances[0].attack.id, 
			   "Rapid7");
		
		var gr = new GlideRecord('u_vulnerability11');   
		// in this table all vulnerabilities are created/updated from Rapid7 InsightAppSec app.
		gr.addQuery('u_uuid', mainvuls[i].id);
		gr.query();
       if(gr.next())
                    {
		gr.u_severity = mainvuls[i].severity;
		gr.u_vulnerabilityscore = mainvuls[i].vulnerability_score;
		gr.u_rootcause_url = mainvuls[i].root_cause.url;
		gr.u_vulnerability_status = mainvuls[i].status;
		gr.u_variance_id = mainvuls[i].variances[0].attack.id;
		gr.u_attacktype = mainvuls[i].variances[0].attack.id;
		gr.u_newly_discovered = mainvuls[i].newly_discovered;
		gr.update();
		//gs.log("Vulnerability Id " + "    "+ mainvuls[i].id +"  " + "updated");
        //  gs.log('A record with the same Vulnerability Id already exists.');
                     }
       else
	   {
		gr.initialize();
		gr.u_uuid = mainvuls[i].id;
		gr.u_severity = mainvuls[i].severity;
		gr.u_vulnerabilityscore = mainvuls[i].vulnerability_score;
		gr.u_rootcause_url = mainvuls[i].root_cause.url;
		gr.u_vulnerability_status = mainvuls[i].status;
		gr.u_variance_id = mainvuls[i].variances[0].attack.id;
		gr.u_attacktype = mainvuls[i].variances[0].attack.id;
		gr.u_newly_discovered = mainvuls[i].newly_discovered;
		gr.insert();
	   }
    }
} catch (ex) {
    gs.log("EROR", "Rapid7");
    var message = ex.message;
}

extremely helpful for those who want to create incident from Rapid7 InsightAppSec application.    

View solution in original post

9 REPLIES 9

If you search the logs for 'Vulnerability' does it come up?

Thanks Cris,

In system logs , applied the filter created on last 15 min. no mention of vulnerability in any log message.  above error messages is not consistent whenever i run scheduled script. check below script as per your suggestion.

   var response = r.execute();
    var responseBody = response.getBody();
    var httpStatus = response.getStatusCode();

   // gs.log("parsing data" + responseBody);
    var vuls = JSON.parse(responseBody);
	//gs.log("vulnerabilities are " + vuls);
    for (i = 0; i < vuls.length; i++) {
        //gs.log("vul id is is " + vuls.data.plannedEvents[i].id);
		//gs.log("Vul id is " +vuls[0].data[0].id);
		//gs.log("Vulnerability id's are " + JSON.stringify(vuls.data[0].id));
		gs.log("Vulnerability id's are " + JSON.stringify(vuls.data[0].items[0].id));
		gs.log("Vulnerability severity's are " + JSON.stringify(vuls.data[0].items[0].severity));
		 // gs.log("Vulnerability id's are " +vuls[0].data[0].id);
    }

 

Hmm, so it would seem that perhaps the 'catch' block is being executed.

 

If you do a gs.info(message); in the 'catch' block of your code, what does it say?

Mahendra RC
Mega Sage

Hello Ganesh,

If you issue still exist then please check with below code:

try {
    var r = new sn_ws.RESTMessageV2('Rapid7 Vulnerabilities', 'Default GET');

    //override authentication profile 
    //authentication type ='basic'/ 'oauth2'
    //r.setAuthenticationProfile(authentication type, profile name);

    //set a MID server name if one wants to run the message on MID
    //r.setMIDServer('MY_MID_SERVER');

    //if the message is configured to communicate through ECC queue, either
    //by setting a MID server or calling executeAsync, one needs to set skip_sensor
    //to true. Otherwise, one may get an intermittent error that the response body is null
    //r.setEccParameter('skip_sensor', true);

    var response = r.execute();
    var responseBody = response.getBody();
    var httpStatus = response.getStatusCode();

   // gs.log("parsing data" + responseBody);
    var vuls = JSON.stringify(responseBody);
	//gs.log("vulnerabilities are " + vuls);
    var vulnerabilities = vuls["data"]; // I have added this line and modified below code
    for (i = 0; i < vulnerabilities.length; i++) {
        //gs.log("vul id iss " + vulnerabilities.data.plannedEvents[i].id);
		gs.log("Vulnerability id's are " +vulnerabilities[i]["id"]);
		
    }
} catch (ex) {
    var message = ex.message;
}

Please mark this as helpful/correct, if it answer your question.

Thanks

Ganesh65
Tera Expert

Hi all, please find below scheduled job script to parse data from json file to update table in servicenow. This code works fine in my instance.

try {
    var r = new sn_ws.RESTMessageV2('Rapid7 Vulnerabilities', 'Default GET');

    //override authentication profile 
    //authentication type ='basic'/ 'oauth2'
    //r.setAuthenticationProfile(authentication type, profile name);

    //set a MID server name if one wants to run the message on MID
    //r.setMIDServer('MY_MID_SERVER');

    //if the message is configured to communicate through ECC queue, either
    //by setting a MID server or calling executeAsync, one needs to set skip_sensor
    //to true. Otherwise, one may get an intermittent error that the response body is null
    //r.setEccParameter('skip_sensor', true);

    var response = r.execute();
    var responseBody = response.getBody();
    var httpStatus = response.getStatusCode();

    var vuls = JSON.parse(responseBody);
    var mainvuls = vuls.data;
   
    for (i = 0; i < mainvuls.length; i++) {
      
        gs.log(mainvuls.length + 
			   "\n" + "Vulnerability Id is " + "  "+ mainvuls[i].id + 
			   "\n"+ "Vulnerability Severity is " + "  "+ mainvuls[i].severity + 
			   "\n" + "Vulnerability Status is " + "  "+mainvuls[i].status + 
			   "\n" + "Vulnerability Score is " + "  " +mainvuls[i].vulnerability_score + 
			   "\n" + "Vulnerability root cause URL is " + "  " +mainvuls[i].root_cause.url +
			   "\n" + "Vulnerability variance id is " + "  " +mainvuls[i].variances[0].id + 
			   "\n" + "Vulnerability Attack id is " + "  " +mainvuls[i].variances[0].attack.id, 
			   "Rapid7");
		
		var gr = new GlideRecord('u_vulnerability11');   
		// in this table all vulnerabilities are created/updated from Rapid7 InsightAppSec app.
		gr.addQuery('u_uuid', mainvuls[i].id);
		gr.query();
       if(gr.next())
                    {
		gr.u_severity = mainvuls[i].severity;
		gr.u_vulnerabilityscore = mainvuls[i].vulnerability_score;
		gr.u_rootcause_url = mainvuls[i].root_cause.url;
		gr.u_vulnerability_status = mainvuls[i].status;
		gr.u_variance_id = mainvuls[i].variances[0].attack.id;
		gr.u_attacktype = mainvuls[i].variances[0].attack.id;
		gr.u_newly_discovered = mainvuls[i].newly_discovered;
		gr.update();
		//gs.log("Vulnerability Id " + "    "+ mainvuls[i].id +"  " + "updated");
        //  gs.log('A record with the same Vulnerability Id already exists.');
                     }
       else
	   {
		gr.initialize();
		gr.u_uuid = mainvuls[i].id;
		gr.u_severity = mainvuls[i].severity;
		gr.u_vulnerabilityscore = mainvuls[i].vulnerability_score;
		gr.u_rootcause_url = mainvuls[i].root_cause.url;
		gr.u_vulnerability_status = mainvuls[i].status;
		gr.u_variance_id = mainvuls[i].variances[0].attack.id;
		gr.u_attacktype = mainvuls[i].variances[0].attack.id;
		gr.u_newly_discovered = mainvuls[i].newly_discovered;
		gr.insert();
	   }
    }
} catch (ex) {
    gs.log("EROR", "Rapid7");
    var message = ex.message;
}

extremely helpful for those who want to create incident from Rapid7 InsightAppSec application.