How to get the value of repository id and Name from the source data field by using array?

jugantanayak
Tera Guru

Hi,

How to get the value of repository id and Name from the source data field by using array?

source data: {"assetexposurescore":"497","repository":"{\"id\" : \"36\", \"name\" : \"(01) - Health Services - ActiveScan\", \"description\" : \"Health Services - ActiveScan\", \"dataFormat\" : \"IPv4\"}","score":"40","acrscore":"4.0",

2 ACCEPTED SOLUTIONS

Hi @jugantanayak 

 

As it contains escape characters so we need to first remove the escape characters.

Refer the below Steps : 

 

// 1.Store result in variable , Just for simplicity I have taken only some data from your JSON object
var result = {"assetexposurescore":"497","repository":"{\"id\" : \"36\", \"name\" : \"(01) - Health Services - ActiveScan\", \"description\" : \"Health Services - ActiveScan\", \"dataFormat\" : \"IPv4\"}"}

// 2. Stringyfy the result so that we can remove escape characters
var stResult = JSON.stringify(result);

// 3. replace the escape characters
var newResult = stResult.replace( /\'\'/g,'');

// 4. convert it into object again
var parser = JSON.parse(newResult);

// 5. get the repository object form newly created object
var repository = parser.repository;

//gs.info('repostory=' + repository);
// 6. Create new JSON objectas repository contains string

var newObj = {

    repoData : {},

}

// 7. add parsed repository into new JSON
newObj.repoData = JSON.parse(repository);

// 8. get the values by dot walking

gs.info("Id = " + newObj.repoData.id);
gs.info("name = " + newObj.repoData.name);

 

 

Output : 

 

VishalBirajdar_0-1695699571048.png

 

 

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

View solution in original post

Hi @Vishal Birajdar ,

 

Issue has been resolved, I am sharing my updated fix script.

And Thank you so much for all your help, which really helps me a lot.

var res = new GlideRecord('sn_sec_cmn_src_ci');
res.addQuery("source","57fd7e2353b300100ac3ddeeff7b1233");
res.addNotNullQuery("source_data");
res.setLimit(3);
res.query();
while(res.next()){
var result =res.getValue('source_data');
var newResult = result.replace( /\'\'/g,'');
var parser = JSON.parse(newResult);
var repository = parser.repository;
var newObj = {};
newObj = JSON.parse(repository);
var idRepo =newObj.id;
var nameRepo = newObj.name;
res.u_repository_id=idRepo;
res.u_repository_name=nameRepo;
res.update();

}

View solution in original post

21 REPLIES 21

Screenshot of fix script please...!!

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

Hi @Vishal Birajdar ,

 

I am sharingthe screenshots as attachments.

 

Regards,

Juganta

The code looks good..!!

 

Try to put semi-colon (;) in line no. 11 after curly braces (})

 

like this    };

 

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates

Hi @Vishal Birajdar ,

 

Still getting the same error.

 

Regards,

Juganta

Only option is to debug the script by putting some logs.

Check in logs what you are getting in 'repository' variable.

The error may be because of empty value is passed in JSON at line 12.

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates