We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

How to get the JSON key and value. How to get the length of parent.

Raj82
Kilo Expert

I have converted the XML into JSON. But I am unable to get any values from that Json. Also I am not able to get the length. Please help. I want to know how many info there and I want to get the key and value from each info node. I consider each info is single record.

 

{
"soap:Envelope": {
"xmlns:soap": "http://www.w3.org/2003/05/soap-envelope",
"soap:Body": {
"customerListResponse": {
"xmlns": "http://ei2.nobj.nable.com/",
"return": [

{
"info": [
{
"value": "622",
"key": "customer.customerid"
},
{
"value": "All Covered - Workspaces",
"key": "customer.customername"
}
]
},

 

{
"info": [
{
"value": "623",
"key": "customer.customerid"
},
{
"value": "1All Covered - Workspaces 1",
"key": "customer.customername"
}
]
}
]
}

 


}
}
}

1 ACCEPTED SOLUTION

To get the length of Info:

 var req = JSON_FILE; 

 var totalRecords = req["soap:Envelope"]["soap:Body"]["customerListResponse"]["return"].length;

 

 

To get the key and value in first "Info":

 

 var key = req["soap:Envelope"]["soap:Body"]["customerListResponse"]["return"][0].info[0].key;

var value = req["soap:Envelope"]["soap:Body"]["customerListResponse"]["return"][0].info[0].value;

 

Thanks,

Raj

View solution in original post

12 REPLIES 12

That's a really nasty JSON you're working with. You can get the details you need with some string manipulation to get the colons out and to replace 'return' with a non-reserved word but if you can change the source that'd be preferable.

var obj = {
    "soap:Envelope": {
        "xmlns:soap": "http://www.w3.org/2003/05/soap-envelope",
        "soap:Body": {
            "customerListResponse": {
                "xmlns": "http://ei2.nobj.nable.com/",
                "return": [{
                        "info": [{
                                "value": "622",
                                "key": "customer.customerid"
                            },
                            {
                                "value": "All Covered - Workspaces",
                                "key": "customer.customername"
                            }
                        ]
                    },
                    {
                        "info": [{
                                "value": "623",
                                "key": "customer.customerid"
                            },
                            {
                                "value": "1All Covered - Workspaces 1",
                                "key": "customer.customername"
                            }
                        ]
                    }
                ]
            }
        }
    }
};

function replacer(match) {
    return match[0] + match[2];
}

var objstring = JSON.stringify(obj).replace(/[a-z]:[a-z]/gmi, replacer).replace('return','returns');

var newJSON = JSON.parse(objstring);
var returnObj = newJSON.soapEnvelope.soapBody.customerListResponse.returns;

for (var i = 0; i < returnObj.length; i++) {
    for (var j = 0; j < returnObj[i].info.length; j++) {
        gs.log(returnObj[i].info[j].key + ' ' + returnObj[i].info[j].value);
    }
}

Hey David,

 

Yes I know, this type of Json was very difficult to handle. I have converted the XML into JSON,that's why we get this. But I find the way to handle these type of difficult JSON. Please below.

 

To get the length of Info:

 var req = JSON_FILE;

 var totalRecords = req["soap:Envelope"]["soap:Body"]["customerListResponse"]["return"].length;

 

 

To get the key and value in first "Info":

 

 var key = req["soap:Envelope"]["soap:Body"]["customerListResponse"]["return"][0].info[0].key;

var value = req["soap:Envelope"]["soap:Body"]["customerListResponse"]["return"][0].info[0].value;

 

Thanks,

Raj

To get the length of Info:

 var req = JSON_FILE; 

 var totalRecords = req["soap:Envelope"]["soap:Body"]["customerListResponse"]["return"].length;

 

 

To get the key and value in first "Info":

 

 var key = req["soap:Envelope"]["soap:Body"]["customerListResponse"]["return"][0].info[0].key;

var value = req["soap:Envelope"]["soap:Body"]["customerListResponse"]["return"][0].info[0].value;

 

Thanks,

Raj

that's much easier than my way 🙂

asifnoor
Kilo Patron

Hello Raj,

As i see it, the return is enclosed within customerListResponse. Is it possible to get the return object only as a json, so that it is easier to read. 

Kindly mark the comment as a correct answer and helpful if it helps to solve your problem.

Regards,
Asif
2020 ServiceNow Community MVP