<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>question Parsing values from multi-level JSON Array in Developer forum</title>
    <link>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648665#M305591</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I am retrieving data from Google Admin. The goal is to retrieve the most recent device users from the customer and update their hardware assets in our instance with the most recent user periodically.&lt;/P&gt;
&lt;P&gt;The response body I get looks like this:&amp;nbsp;&lt;/P&gt;
&lt;PRE class="language-markup"&gt;&lt;CODE&gt;{
    "chromeosdevices": [
        {
            "serialNumber": "F88B473",
            "lastSync": "2020-10-25T07:01:21.772Z",
            "recentUsers": [
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name@mail.com"
                }
            ]
        },

        {
            "serialNumber": "5CD13786X9",
            "lastSync": "2020-10-14T07:29:47.104Z"
        },
        {
            "serialNumber": "NXHKLED00J08132D917600",
            "lastSync": "2020-11-03T10:09:58.319Z",
            "recentUsers": [
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name2@mail.com"
                },
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name3@mail.com"
                }
            ]
        }        
    ]
}&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This response body has been shortened for brevity. I retrieve all their devices at once. What I need to do is iterate through the chromedevices array and each individual recentUsers array (the first user in every recentUsers is the most recent one), so I can put serialNumber and email together and update our records.&lt;/P&gt;
&lt;P&gt;I've gotten so far as getting my hands on the serial numbers using a regular for loop:&lt;/P&gt;
&lt;PRE class="language-javascript"&gt;&lt;CODE&gt;var obj = JSON.parse(responseBody);

for (i = 0; i &amp;lt; obj.chromeosdevices.length; i++) {	
    gs.print(obj.chromeosdevices[i].serialNumber);
 }&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;But I am stumped as to how I can get my hands on the emails and put them together.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Anyone got any pointers? &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
    <pubDate>Mon, 23 Nov 2020 21:45:03 GMT</pubDate>
    <dc:creator>Immanuel Kant</dc:creator>
    <dc:date>2020-11-23T21:45:03Z</dc:date>
    <item>
      <title>Parsing values from multi-level JSON Array</title>
      <link>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648665#M305591</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I am retrieving data from Google Admin. The goal is to retrieve the most recent device users from the customer and update their hardware assets in our instance with the most recent user periodically.&lt;/P&gt;
&lt;P&gt;The response body I get looks like this:&amp;nbsp;&lt;/P&gt;
&lt;PRE class="language-markup"&gt;&lt;CODE&gt;{
    "chromeosdevices": [
        {
            "serialNumber": "F88B473",
            "lastSync": "2020-10-25T07:01:21.772Z",
            "recentUsers": [
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name@mail.com"
                }
            ]
        },

        {
            "serialNumber": "5CD13786X9",
            "lastSync": "2020-10-14T07:29:47.104Z"
        },
        {
            "serialNumber": "NXHKLED00J08132D917600",
            "lastSync": "2020-11-03T10:09:58.319Z",
            "recentUsers": [
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name2@mail.com"
                },
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name3@mail.com"
                }
            ]
        }        
    ]
}&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This response body has been shortened for brevity. I retrieve all their devices at once. What I need to do is iterate through the chromedevices array and each individual recentUsers array (the first user in every recentUsers is the most recent one), so I can put serialNumber and email together and update our records.&lt;/P&gt;
&lt;P&gt;I've gotten so far as getting my hands on the serial numbers using a regular for loop:&lt;/P&gt;
&lt;PRE class="language-javascript"&gt;&lt;CODE&gt;var obj = JSON.parse(responseBody);

for (i = 0; i &amp;lt; obj.chromeosdevices.length; i++) {	
    gs.print(obj.chromeosdevices[i].serialNumber);
 }&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;But I am stumped as to how I can get my hands on the emails and put them together.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Anyone got any pointers? &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 23 Nov 2020 21:45:03 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648665#M305591</guid>
      <dc:creator>Immanuel Kant</dc:creator>
      <dc:date>2020-11-23T21:45:03Z</dc:date>
    </item>
    <item>
      <title>Re: Parsing values from multi-level JSON Array</title>
      <link>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648666#M305592</link>
      <description>&lt;P&gt;Use below code to parse serial number from your JSON object&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE class="language-markup"&gt;&lt;CODE&gt;var json = new global.JSON();
var obj = json.decode(responseBody);
for(i = 0; i&amp;lt;= obj.Devices.length-1; i++)
{
gs.info(obj.chromeosdevices[i].serialNumber);
}&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards,&lt;/P&gt;
&lt;P&gt;Sachin&lt;/P&gt;</description>
      <pubDate>Mon, 23 Nov 2020 21:52:39 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648666#M305592</guid>
      <dc:creator>sachin_namjoshi</dc:creator>
      <dc:date>2020-11-23T21:52:39Z</dc:date>
    </item>
    <item>
      <title>Re: Parsing values from multi-level JSON Array</title>
      <link>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648667#M305593</link>
      <description>&lt;P&gt;Hi Sachin&lt;/P&gt;
&lt;P&gt;Thank you for the response, however I've already managed to parse the serial numbers. The challenge is to parse the most recent email from the recentUsers arrays paired with the serial number &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 23 Nov 2020 21:55:07 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648667#M305593</guid>
      <dc:creator>Immanuel Kant</dc:creator>
      <dc:date>2020-11-23T21:55:07Z</dc:date>
    </item>
    <item>
      <title>Re: Parsing values from multi-level JSON Array</title>
      <link>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648668#M305594</link>
      <description>&lt;P&gt;You can use below code to parse most recent email&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE class="language-markup"&gt;&lt;CODE&gt;var obj = {
    "chromeosdevices": [
        {
            "serialNumber": "F88B473",
            "lastSync": "2020-10-25T07:01:21.772Z",
            "recentUsers": [
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name@mail.com"
                }
            ]
        },

        {
            "serialNumber": "5CD13786X9",
            "lastSync": "2020-10-14T07:29:47.104Z"
        },
        {
            "serialNumber": "NXHKLED00J08132D917600",
            "lastSync": "2020-11-03T10:09:58.319Z",
            "recentUsers": [
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name2@mail.com"
                },
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name3@mail.com"
                }
            ]
        }        
    ]
};

gs.print(obj.chromeosdevices[0].recentUsers.email);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards,&lt;/P&gt;
&lt;P&gt;Sachin&lt;/P&gt;</description>
      <pubDate>Mon, 23 Nov 2020 22:03:13 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648668#M305594</guid>
      <dc:creator>sachin_namjoshi</dc:creator>
      <dc:date>2020-11-23T22:03:13Z</dc:date>
    </item>
    <item>
      <title>Re: Parsing values from multi-level JSON Array</title>
      <link>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648669#M305595</link>
      <description>&lt;P&gt;Thanks again Sachin, however this gives me 'undefined'. I also need to loop through all of them.&lt;/P&gt;</description>
      <pubDate>Mon, 23 Nov 2020 22:11:38 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648669#M305595</guid>
      <dc:creator>Immanuel Kant</dc:creator>
      <dc:date>2020-11-23T22:11:38Z</dc:date>
    </item>
    <item>
      <title>Re: Parsing values from multi-level JSON Array</title>
      <link>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648670#M305596</link>
      <description>&lt;P&gt;You will have to iterate through array of this nested JSON like below&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE class="language-markup"&gt;&lt;CODE&gt;var obj = {
    "chromeosdevices": [
        {
            "serialNumber": "F88B473",
            "lastSync": "2020-10-25T07:01:21.772Z",
            "recentUsers": [
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name@mail.com"
                }
            ]
        },

        {
            "serialNumber": "5CD13786X9",
            "lastSync": "2020-10-14T07:29:47.104Z"
        },
        {
            "serialNumber": "NXHKLED00J08132D917600",
            "lastSync": "2020-11-03T10:09:58.319Z",
            "recentUsers": [
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name2@mail.com"
                },
                {
                    "type": "USER_TYPE_MANAGED",
                    "email": "madeup_name3@mail.com"
                }
            ]
        }        
    ]
};

for (var key in obj) { // Loop through all the elements in the objects array
	
	var array_element=obj[key];
        
	for (var innerKey in array_element)//For each element, see if it contains key named email
		{
		if(innerKey == "email"){
			var cluster_array = array_element[innerKey];

			for (var clusterKey in cluster_array)// Print each element in the Cluster array 
				{
				gs.print(cluster_array[clusterKey]);
			}
		}
	}
}

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards,&lt;/P&gt;
&lt;P&gt;Sachin&lt;/P&gt;</description>
      <pubDate>Mon, 23 Nov 2020 22:48:02 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/parsing-values-from-multi-level-json-array/m-p/1648670#M305596</guid>
      <dc:creator>sachin_namjoshi</dc:creator>
      <dc:date>2020-11-23T22:48:02Z</dc:date>
    </item>
  </channel>
</rss>

