The CreatorCon Call for Content is officially open! Get started here.

How to fetch specific data from JSON object

MS17
Tera Contributor

Hello All,

 

I have a json data as below, I want to fetch data which has same "rota" value.

eg:

var group = '096fb59173062300e7af6238edf6a783'; 

var rota = new OnCallRotation();
var currentOnCall = rota.getEscalatees(group);
gs.print("oncall members"+JSON.stringify(currentOnCall));

 

The code returning the oncall members datails, I want to fetch the data which has "rota" : '349f399173062300e7af6238edf6a75e'.  If the rota value matched, I need all the data of matched rota like "memberId","memberIds","userId","userIds","roster" etc. Can anyone please help me with this.

 

Json Data:

[
{
"memberId": "119f399173062300e7af6238edf6a7e7",
"memberIds": [],
"userId": "62826bf03710200044e0bfc8bcbe5df1",
"userIds": [],
"roster": "9d9f399173062300e7af6238edf6a7e5",
"rota": "349f399173062300e7af6238edf6a75e",
"group": "096fb59173062300e7af6238edf6a783",
"escalationGroups": [],
"deviceId": "",
"deviceIds": [],
"isDevice": false,
"order": 1,
"isOverride": false,
"rotationScheduleId": "119f399173062300e7af6238edf6a7df",
"memberScheduleId": "9d9f399173062300e7af6238edf6a7ec"
},
{
"memberId": "7daf799173062300e7af6238edf6a7a2",
"memberIds": [],
"userId": "d2826bf03710200044e0bfc8bcbe5dc9",
"userIds": [],
"roster": "b5af799173062300e7af6238edf6a7a2",
"rota": "35af799173062300e7af6238edf6a79e",
"group": "096fb59173062300e7af6238edf6a783",
"escalationGroups": [],
"deviceId": "",
"deviceIds": [],
"isDevice": false,
"order": 1,
"isOverride": false,
"rotationScheduleId": "3daf799173062300e7af6238edf6a79e",
"memberScheduleId": "06af799173062300e7af6238edf6a7cd"
},
{
"memberId": "1d9f399173062300e7af6238edf6a7e8",
"memberIds": [],
"userId": "a8f98bb0eb32010045e1a5115206fe3a",
"userIds": [],
"roster": "9d9f399173062300e7af6238edf6a7e5",
"rota": "349f399173062300e7af6238edf6a75e",
"group": "096fb59173062300e7af6238edf6a783",
"escalationGroups": [],
"deviceId": "",
"deviceIds": [],
"isDevice": false,
"order": 2,
"isOverride": false,
"rotationScheduleId": "119f399173062300e7af6238edf6a7df",
"memberScheduleId": "d99f399173062300e7af6238edf6a7ef"
},

 

Thanks.
  

2 ACCEPTED SOLUTIONS

Peter Bodelier
Giga Sage

Hi @MS17,

 

You could use something like this, you may need to tweak your return object as per your needs.

var json = [
{
"memberId": "119f399173062300e7af6238edf6a7e7",
"memberIds": [],
"userId": "62826bf03710200044e0bfc8bcbe5df1",
"userIds": [],
"roster": "9d9f399173062300e7af6238edf6a7e5",
"rota": "349f399173062300e7af6238edf6a75e",
"group": "096fb59173062300e7af6238edf6a783",
"escalationGroups": [],
"deviceId": "",
"deviceIds": [],
"isDevice": false,
"order": 1,
"isOverride": false,
"rotationScheduleId": "119f399173062300e7af6238edf6a7df",
"memberScheduleId": "9d9f399173062300e7af6238edf6a7ec"
},
{
"memberId": "7daf799173062300e7af6238edf6a7a2",
"memberIds": [],
"userId": "d2826bf03710200044e0bfc8bcbe5dc9",
"userIds": [],
"roster": "b5af799173062300e7af6238edf6a7a2",
"rota": "35af799173062300e7af6238edf6a79e",
"group": "096fb59173062300e7af6238edf6a783",
"escalationGroups": [],
"deviceId": "",
"deviceIds": [],
"isDevice": false,
"order": 1,
"isOverride": false,
"rotationScheduleId": "3daf799173062300e7af6238edf6a79e",
"memberScheduleId": "06af799173062300e7af6238edf6a7cd"
},
{
"memberId": "1d9f399173062300e7af6238edf6a7e8",
"memberIds": [],
"userId": "a8f98bb0eb32010045e1a5115206fe3a",
"userIds": [],
"roster": "9d9f399173062300e7af6238edf6a7e5",
"rota": "349f399173062300e7af6238edf6a75e",
"group": "096fb59173062300e7af6238edf6a783",
"escalationGroups": [],
"deviceId": "",
"deviceIds": [],
"isDevice": false,
"order": 2,
"isOverride": false,
"rotationScheduleId": "119f399173062300e7af6238edf6a7df",
"memberScheduleId": "d99f399173062300e7af6238edf6a7ef"
}];

var values = getValues(json, '349f399173062300e7af6238edf6a75e');
gs.print(values);

function getValues(obj, rota) {
  var values = [];

  for (var i = 0; i < obj.length; i++) {
    if (obj[i].rota === rota) {
      values.push(obj[i].memberId);
      values.push(obj[i].memberIds);
      values.push(obj[i].userId);
      values.push(obj[i].userIds);
      values.push(obj[i].roster);
    }
  }
  return values;
}

 

 


Help others to find a correct solution by marking the appropriate response as accepted solution and helpful.

View solution in original post

Sure:

 

You could do that like this:

 

var group = '096fb59173062300e7af6238edf6a783';
var rota = new OnCallRotation();
var currentOnCall = rota.getEscalatees(group);
var json = JSON.stringify(currentOnCall);
var values = getValues(json, '349f399173062300e7af6238edf6a75e');
gs.print(values);

function getValues(obj, rota) {
var values = [];

for (var i = 0; i < obj.length; i++) {
if (obj[i].rota === rota) {
var curObj = {};
curObj.memberId = obj[i].memberId;
curObj.memberIds= obj[i].memberIds;
curObj.userId= obj[i].userId;
curObj.userIds= obj[i].userIds;
curObj.roster= obj[i].roster;
values.push(curObj);
}
}
return values;
}

Help others to find a correct solution by marking the appropriate response as accepted solution and helpful.

View solution in original post

11 REPLIES 11

Hi @MS17,

 

That makes sense. You are doing a stringify now, which changes an object to plain text.

In order for this to work we will need the Json as an object.

 

I'm not sure how you stored it, so you'll have to change var json = JSON.stringify(currentOnCall); to either var json = currentOnCall;
or var json = JSON.parse(currentOnCall);


Help others to find a correct solution by marking the appropriate response as accepted solution and helpful.

Hi Peter,

I have modified as you mentioned, below are the results.

1. when I used var json = JSON.parse(currentOnCall);

oc1.JPG

2 when I used var json = currentOnCall;

 

oc2.JPG

Could you add gs.print(JSON.stringify(currentOnCall));

It looks like you're not receiving data.


Help others to find a correct solution by marking the appropriate response as accepted solution and helpful.

Hi Peter,

Yes, I have passed wrong group. Now it is returning data. I have one more query, How to get the same data as key pair value. because I need to use the key in my script. Is it possible to get the data as below. If rota is matched, then I need all the data in the below format. 

 

{
"memberId": "119f399173062300e7af6238edf6a7e7",
"memberIds": [],
"userId": "62826bf03710200044e0bfc8bcbe5df1",
"userIds": [],
"roster": "9d9f399173062300e7af6238edf6a7e5",
"rota": "349f399173062300e7af6238edf6a75e",
"group": "096fb59173062300e7af6238edf6a783",
"escalationGroups": [],
"deviceId": "",
"deviceIds": [],
"isDevice": false,
"order": 1,
"isOverride": false,
"rotationScheduleId": "119f399173062300e7af6238edf6a7df",
"memberScheduleId": "9d9f399173062300e7af6238edf6a7ec"
},

 

Sure:

 

You could do that like this:

 

var group = '096fb59173062300e7af6238edf6a783';
var rota = new OnCallRotation();
var currentOnCall = rota.getEscalatees(group);
var json = JSON.stringify(currentOnCall);
var values = getValues(json, '349f399173062300e7af6238edf6a75e');
gs.print(values);

function getValues(obj, rota) {
var values = [];

for (var i = 0; i < obj.length; i++) {
if (obj[i].rota === rota) {
var curObj = {};
curObj.memberId = obj[i].memberId;
curObj.memberIds= obj[i].memberIds;
curObj.userId= obj[i].userId;
curObj.userIds= obj[i].userIds;
curObj.roster= obj[i].roster;
values.push(curObj);
}
}
return values;
}

Help others to find a correct solution by marking the appropriate response as accepted solution and helpful.