Parsing JSON Objects

JJG
Kilo Guru

 I have an outbound REST message that returns a JSON response.

Outbound REST message:

var getAccount = new sn_ws.RESTMessageV2('TestMessage', 'Accounts');
getAccount.setStringParameterNoEscape("authorization", accessToken);

var response = getAccount.execute();
var responseBody = response.getBody();


gs.info("responseBody : " + responseBody);

 

Here is responseBody of the outbound REST message:

{
   "@odata.context":"this is a test",
   "value":[
   {
   "test_value_1":"test1",
   "test_value_2":"test2"
   },
   {
   "test_value_1":"test3",
   "test_value_2":"test4"
   },
   {
   "test_value_1":"test5",
   "test_value_2":"test6"
   }

   ]
}

 

I need to parse this JSON response and get test_value_1 and test_value_2 for each object. How can I do this? I am thinking a for loop of some kind, but I cant figure out how to configure it.

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

@JJG 

Considering you are receiving valid JSON response here is the script

Script:

var json = '{"@odata.context":"this is a test","value":[{"test_value_1":"test1","test_value_2":"test2"},{"test_value_1":"test3","test_value_2":"test4"},{"test_value_1":"test5","test_value_2":"test6"}]}';

var parser = JSON.parse(json);

var testValue1Arr = [];
var testValue2Arr = [];

for(var i=0;i<parser.value.length;i++){
	testValue1Arr.push(parser.value[i].test_value_1+'');
	testValue2Arr.push(parser.value[i].test_value_2+'');
}

gs.info("Test value1 array->" + testValue1Arr.toString());
gs.info("Test value2 array->" + testValue2Arr.toString());

Output:

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

5 REPLIES 5

Filipe Cruz
Kilo Sage
Kilo Sage

Hello,

if responseBody.value is an Array, you can do something like:

var values = responseBody.value;

var val1 = [];
var val2 = [];

for(var i = 0; i < values.length; i++){
  val1.push(values[i].test_value_1);
  val2.push(values[i].test_value_2);
}

With this you will have val1 and val2 arrays containing the test_value_1 and test_value_2 values.

If this answer is relevant for you, please mark it as correct/helpful.

Thanks,

Filipe

Just a note: from the example you posted, value array does not have the ending ].
Was this a typo?

Yes it was a typo. 

I tried your method and I'm getting undefined values:

 

var getAccount = new sn_ws.RESTMessageV2('TestMessage', 'Accounts');
getAccount.setStringParameterNoEscape("authorization", accessToken);

var response = getAccount.execute();
var responseBody = response.getBody();


gs.info("responseBody : " + responseBody);

var values = responseBody.value;
gs.info("values: "+values);

var val1 = [];
var val2 = [];

for (var i = 0; i < values.length; i++) {
     val1.push(values[i].test_value_1);
     val2.push(values[i].test_value_2);
}

gs.info("val1: "+values);
gs.info("val2: "+values);

 

Output in the logs:

values: undefined

val1: undefined

val2: undefined

Ankur Bawiskar
Tera Patron
Tera Patron

@JJG 

Considering you are receiving valid JSON response here is the script

Script:

var json = '{"@odata.context":"this is a test","value":[{"test_value_1":"test1","test_value_2":"test2"},{"test_value_1":"test3","test_value_2":"test4"},{"test_value_1":"test5","test_value_2":"test6"}]}';

var parser = JSON.parse(json);

var testValue1Arr = [];
var testValue2Arr = [];

for(var i=0;i<parser.value.length;i++){
	testValue1Arr.push(parser.value[i].test_value_1+'');
	testValue2Arr.push(parser.value[i].test_value_2+'');
}

gs.info("Test value1 array->" + testValue1Arr.toString());
gs.info("Test value2 array->" + testValue2Arr.toString());

Output:

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader