How to push fields details into Object

Supriya25
Tera Guru

Hi All,

Kindly help to deal below situation.
now kindly help me how to deal below format if there is nested values and push into Object {}

 

 

 

var j={
         info:{
           data: [ 
             {
              rollNumber:"98087",
              name:"ABC",
              section:"A"
              }, {
              rollNumber:"98097",
              name:"ABCD",
              section:"B"
              }
            ]
        }
  }

 

 

 

Script:

system Property : List of student fields
values: rollNumber,name, section,

 

var gr = gs.getProperty("list of student fields").split(',');
var parse = JSON.parse(j);
var result = parse.info.data;
var obj={};
var final=[];
for(var i in gr){
if(gr[i] in result){
obj[gr[i]] = result[gr[i]].toString();
}
}
final.push(obj);

 

 

 

 

 

 

 

1 ACCEPTED SOLUTION

Can't reproduce, check your input data maybe. I've used your data as you've described and it works fine (eg: run this in a BG script):

 

var fields = "rollNumber, name, section".split(/,\s*/);
var j = { info:{ data: [ { rollNumber:"98087", name:"ABC", section:"A" }, { rollNumber:"98097", name:"ABCD", section:"B" } ] } };
var data = j.info.data;

var res = [];
data.forEach(function(obj) {
  var resObj = {};
  fields.forEach(function(field) {
    if (field in obj)
      resObj[field] = obj[field];
  });
  res.push(resObj);
});

gs.info(JSON.stringify(res, null, 2));
/* Output:
[
  {
    "rollNumber": "98087",
    "name": "ABC",
    "section": "A"
  },
  {
    "rollNumber": "98097",
    "name": "ABCD",
    "section": "B"
  }
]
*/

 

View solution in original post

11 REPLIES 11

Nick Parsons
Mega Sage

 

var fields = gs.getProperty("list of student fields").split(/,\s*/);
var parse = JSON.parse(j);
var data = parse.info.data;

var res = [];
data.forEach(function(obj) {
  var resObj = {};
  fields.forEach(function(field) {
    if (field in obj)
      resObj[field] = obj[field];
  });
  res.push(resObj);
});
// use `res`

 

If you're running JavaScript mode ES2021+:

 

const fields = gs.getProperty("list of student fields").split(/,\s*/);
const parse = JSON.parse(j);
const data = parse.info.data;

const res = data.map(obj => Object.fromEntries(
  fields.filter(field => field in obj).map(field => [field, obj[field]])
));
// use `res`

 

var fields = gs.getProperty("list of student fields").split(',');
var parse = JSON.parse(j);
var data = parse.info.data;

var res = [];
data.forEach(function(obj) {
  var resObj = {};
  fields.forEach(function(field) {
    if (field in obj)
      resObj[field] = obj[field];
  });
  res.push(resObj);
});


I tried your script below output coming
same values pushing into 2nd set
[{"rollNumber":98087,"name":"ABC","section":"A"},{"rollNumber":98087,"name":"ABC","section":"A"}]

Can't reproduce, check your input data maybe. I've used your data as you've described and it works fine (eg: run this in a BG script):

 

var fields = "rollNumber, name, section".split(/,\s*/);
var j = { info:{ data: [ { rollNumber:"98087", name:"ABC", section:"A" }, { rollNumber:"98097", name:"ABCD", section:"B" } ] } };
var data = j.info.data;

var res = [];
data.forEach(function(obj) {
  var resObj = {};
  fields.forEach(function(field) {
    if (field in obj)
      resObj[field] = obj[field];
  });
  res.push(resObj);
});

gs.info(JSON.stringify(res, null, 2));
/* Output:
[
  {
    "rollNumber": "98087",
    "name": "ABC",
    "section": "A"
  },
  {
    "rollNumber": "98097",
    "name": "ABCD",
    "section": "B"
  }
]
*/

 

let me try this one please.

I tried below one also
var aa = JSON.stringify(j);

var grr = JSON.parse(aa);

var tt=grr.info.data;

var grobj={};

for(var j=0;j<tt.length;j++){

for(var key in pr){

if(pr[key] in tt[j]){

grObj[pr[key]]=tt[j][pr[key]];

}

}
arr.push(grObj);

gs.info(JSON.stringify(arr)); 
this method also giving same result.