- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-26-2023 10:59 PM
Thank you for your help.
I am trying to implement a process to convert XML to JSON objects and insert users into the sys_user table.
var xmlStr_multiple = "";
xmlStr_multiple += "<Names>";
xmlStr_multiple += " <Name>";
xmlStr_multiple += " <user_name>test1</user_name>";
xmlStr_multiple += " <FirstName>John</FirstName>";
xmlStr_multiple += " <LastName>Smith</LastName>";
xmlStr_multiple += " </Name>";
xmlStr_multiple += " <Name>";
xmlStr_multiple += " <user_name>test2</user_name>";
xmlStr_multiple += " <FirstName>James</FirstName>";
xmlStr_multiple += " <LastName>White</LastName>";
xmlStr_multiple += " </Name>";
xmlStr_multiple += "</Names>";
var xmlStr_single = "";
xmlStr_single += "<Names>";
xmlStr_single += " <Name>";
xmlStr_single += " <user_name>test1</user_name>";
xmlStr_single += " <FirstName>John</FirstName>";
xmlStr_single += " <LastName>Smith</LastName>";
xmlStr_single += " </Name>";
xmlStr_single += "</Names>";
var xmlObj_multiple = gs.xmlToJSON(xmlStr_multiple);
var user_multiple = xmlObj_multiple.Names.Name;
var xmlObj_single = gs.xmlToJSON(xmlStr_single);
var user_single = xmlObj_single.Names.Name;
gs.info("Multiple Insertion ⇒" + JSON.stringify(user_multiple));
gs.info("Object.keys() ⇒" + Object.keys(user_multiple));
gs.info("Object.keys().length ⇒" + Object.keys(user_multiple).length);
gs.info("Single Insertion ⇒" + JSON.stringify(user_single));
gs.info("Object.keys() ⇒" + Object.keys(user_single));
gs.info("Object.keys().length ⇒" + Object.keys(user_single).length);
for (var i=0; i < Object.keys(user_multiple).length; i++) {
//User insertion process
}
for (var i=0; i < Object.keys(user_single).length; i++) {
//User insertion process
}
However, I have confirmed that the gs.xmlToJSON process is different when the XML content is single or multiple.
When processing multiple users, it has an array[], but when processing a single user, it does not have an array[].
This causes the values passed in Object.keys() and Object.keys().length to be different.
Is there any good workaround or alternative to this as we would like to register users using the conditional processing described in the for statement as much as possible?
*** Script: Multiple Insertion ⇒[{"user_name":"test1","FirstName":"John","LastName":"Smith"},{"user_name":"test2","FirstName":"James","LastName":"White"}]
*** Script: Object.keys() ⇒0,1
*** Script: Object.keys().length ⇒2
*** Script: Single Insertion ⇒{"user_name":"test1","FirstName":"John","LastName":"Smith"}
*** Script: Object.keys() ⇒user_name,FirstName,LastName
*** Script: Object.keys().length ⇒3
Thank you in advance.
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-26-2023 11:41 PM
You can use Array.isArray function to check whether your object is array or not. Convert to array if identified as not array. Refer the script below:
var xmlStr_multiple = "";
xmlStr_multiple += "<Names>";
xmlStr_multiple += " <Name>";
xmlStr_multiple += " <user_name>test1</user_name>";
xmlStr_multiple += " <FirstName>John</FirstName>";
xmlStr_multiple += " <LastName>Smith</LastName>";
xmlStr_multiple += " </Name>";
xmlStr_multiple += " <Name>";
xmlStr_multiple += " <user_name>test2</user_name>";
xmlStr_multiple += " <FirstName>James</FirstName>";
xmlStr_multiple += " <LastName>White</LastName>";
xmlStr_multiple += " </Name>";
xmlStr_multiple += "</Names>";
var xmlStr_single = "";
xmlStr_single += "<Names>";
xmlStr_single += " <Name>";
xmlStr_single += " <user_name>test1</user_name>";
xmlStr_single += " <FirstName>John</FirstName>";
xmlStr_single += " <LastName>Smith</LastName>";
xmlStr_single += " </Name>";
xmlStr_single += "</Names>";
var xmlObj_multiple = gs.xmlToJSON(xmlStr_multiple);
var user_multiple = xmlObj_multiple.Names.Name;
gs.info(Array.isArray(user_multiple));
if(!Array.isArray(user_multiple))
user_multiple = [user_multiple];
var xmlObj_single = gs.xmlToJSON(xmlStr_single);
var user_single = xmlObj_single.Names.Name;
gs.info(Array.isArray(user_single));
if(!Array.isArray(user_single))
user_single = [user_single];
gs.info("Multiple Insertion ⇒" + JSON.stringify(user_multiple));
gs.info("Object.keys() ⇒" + Object.keys(user_multiple));
gs.info("Object.keys().length ⇒" + Object.keys(user_multiple).length);
gs.info("Single Insertion ⇒" + JSON.stringify(user_single));
gs.info("Object.keys() ⇒" + Object.keys(user_single));
gs.info("Object.keys().length ⇒" + Object.keys(user_single).length);
Palani

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-26-2023 11:41 PM
You can use Array.isArray function to check whether your object is array or not. Convert to array if identified as not array. Refer the script below:
var xmlStr_multiple = "";
xmlStr_multiple += "<Names>";
xmlStr_multiple += " <Name>";
xmlStr_multiple += " <user_name>test1</user_name>";
xmlStr_multiple += " <FirstName>John</FirstName>";
xmlStr_multiple += " <LastName>Smith</LastName>";
xmlStr_multiple += " </Name>";
xmlStr_multiple += " <Name>";
xmlStr_multiple += " <user_name>test2</user_name>";
xmlStr_multiple += " <FirstName>James</FirstName>";
xmlStr_multiple += " <LastName>White</LastName>";
xmlStr_multiple += " </Name>";
xmlStr_multiple += "</Names>";
var xmlStr_single = "";
xmlStr_single += "<Names>";
xmlStr_single += " <Name>";
xmlStr_single += " <user_name>test1</user_name>";
xmlStr_single += " <FirstName>John</FirstName>";
xmlStr_single += " <LastName>Smith</LastName>";
xmlStr_single += " </Name>";
xmlStr_single += "</Names>";
var xmlObj_multiple = gs.xmlToJSON(xmlStr_multiple);
var user_multiple = xmlObj_multiple.Names.Name;
gs.info(Array.isArray(user_multiple));
if(!Array.isArray(user_multiple))
user_multiple = [user_multiple];
var xmlObj_single = gs.xmlToJSON(xmlStr_single);
var user_single = xmlObj_single.Names.Name;
gs.info(Array.isArray(user_single));
if(!Array.isArray(user_single))
user_single = [user_single];
gs.info("Multiple Insertion ⇒" + JSON.stringify(user_multiple));
gs.info("Object.keys() ⇒" + Object.keys(user_multiple));
gs.info("Object.keys().length ⇒" + Object.keys(user_multiple).length);
gs.info("Single Insertion ⇒" + JSON.stringify(user_single));
gs.info("Object.keys() ⇒" + Object.keys(user_single));
gs.info("Object.keys().length ⇒" + Object.keys(user_single).length);
Palani
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-11-2023 03:53 AM
Sorry for the delay in replying.
I was able to achieve the requirement using the Array.isArray method.
Thank you very much.