<?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>topic Re: Forescout nested json- How do I categorize the nested json objects into fields within the array? in Splunk Search</title>
    <link>https://community.splunk.com/t5/Splunk-Search/Forescout-nested-json-How-do-I-categorize-the-nested-json/m-p/613748#M213306</link>
    <description>&lt;P&gt;First of all, it is rarely good to use regex to handle structured data like JSON. &amp;nbsp;Splunk has far more powerful tools. &amp;nbsp;Second, you really want to illustrate fake/anonymized data in a way that can exemplify your desired outcome. &amp;nbsp;Third, it is always good to illustrate your desired outcome.&lt;/P&gt;&lt;P&gt;The following illustration is based on my speculation of your requirement.&lt;/P&gt;&lt;P&gt;Raw data:&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;{"ctupdate":"policyinfo","ip":"X.X.X.X","policies":[{"rule_name":"rule1","policy_name":"policy1","since":"2022-01-01","status":"Match"},{"rule_name":"rule2","policy_name":"policy2","since":"2022-02-01","status":"Match"},{"rule_name":"rule1","policy_name":"policy1","since":"2022-03-01","status":"expired"},{"rule_name":"rule4","policy_name":"policy4","since":"2022-04-01","status":"revoked"}]}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;With this, Splunk should already have these fields extracted:&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="81.40625px" height="25px"&gt;ctupdate&lt;/TD&gt;&lt;TD width="61.65625px" height="25px"&gt;ip&lt;/TD&gt;&lt;TD width="174.296875px" height="25px"&gt;&lt;DIV class=""&gt;policies{}.policy_name&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="158.796875px" height="25px"&gt;&lt;DIV class=""&gt;policies{}.rule_name&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="119.90625px" height="25px"&gt;&lt;DIV class=""&gt;policies{}.since&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="105.703125px" height="25px"&gt;&lt;DIV class=""&gt;policies{}.status&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="81.40625px" height="91px"&gt;policyinfo&lt;/TD&gt;&lt;TD width="61.65625px" height="91px"&gt;X.X.X.X&lt;/TD&gt;&lt;TD width="174.296875px" height="91px"&gt;&lt;DIV class=""&gt;policy1&lt;/DIV&gt;&lt;DIV class=""&gt;policy2&lt;/DIV&gt;&lt;DIV class=""&gt;policy3&lt;/DIV&gt;&lt;DIV class=""&gt;policy4&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="158.796875px" height="91px"&gt;&lt;DIV class=""&gt;rule1&lt;/DIV&gt;&lt;DIV class=""&gt;rule2&lt;/DIV&gt;&lt;DIV class=""&gt;rule3&lt;/DIV&gt;&lt;DIV class=""&gt;rule4&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="119.90625px" height="91px"&gt;&lt;DIV class=""&gt;2022-01-01&lt;/DIV&gt;&lt;DIV class=""&gt;2022-02-01&lt;/DIV&gt;&lt;DIV class=""&gt;2022-03-01&lt;/DIV&gt;&lt;DIV class=""&gt;2022-04-01&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="105.703125px" height="91px"&gt;&lt;DIV class=""&gt;Match&lt;/DIV&gt;&lt;DIV class=""&gt;Match&lt;/DIV&gt;&lt;DIV class=""&gt;expired&lt;/DIV&gt;&lt;DIV class=""&gt;revoked&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;(Even if these fields are not extracted, they can be extracted with &lt;A href="https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Spath" target="_blank" rel="noopener"&gt;spath&lt;/A&gt; command.)&lt;/P&gt;&lt;P&gt;I further speculate that you want to access elements of policies{}. &amp;nbsp;This can be achieved with spath command with path parameter:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| spath path=policies{}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This should give you an additional multivalue field policies{} like&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;DIV class=""&gt;policies{}&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;DIV class=""&gt;{"rule_name":"rule1","policy_name":"policy1","since":"2022-01-01","status":"Match"}&lt;/DIV&gt;&lt;DIV class=""&gt;{"rule_name":"rule2","policy_name":"policy2","since":"2022-02-01","status":"Match"}&lt;/DIV&gt;&lt;DIV class=""&gt;{"rule_name":"rule3","policy_name":"policy3","since":"2022-03-01","status":"expired"}&lt;/DIV&gt;&lt;DIV class=""&gt;{"rule_name":"rule4","policy_name":"policy4","since":"2022-04-01","status":"revoked"}&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;To operate on individual elements in the array, use &lt;A href="https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Mvexpand" target="_blank" rel="noopener"&gt;mvexpand&lt;/A&gt;&amp;nbsp;followed by another spath, i.e.,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| spath path=policies{}
| mvexpand policies{}
| spath input=policies{}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This will generate one event per value of policies{}, like this&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;policies{}&lt;/TD&gt;&lt;TD&gt;policy_name&lt;/TD&gt;&lt;TD&gt;rules_name&lt;/TD&gt;&lt;TD&gt;since&lt;/TD&gt;&lt;TD&gt;status&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;{"rule_name":"rule1","policy_name":"policy1","since":"2022-01-01","status":"Match"}&lt;/TD&gt;&lt;TD&gt;policy1&lt;/TD&gt;&lt;TD&gt;rule1&lt;/TD&gt;&lt;TD&gt;2022-01-01&lt;/TD&gt;&lt;TD&gt;Match&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;{"rule_name":"rule2","policy_name":"policy2","since":"2022-02-01","status":"Match"}&lt;/TD&gt;&lt;TD&gt;policy2&lt;/TD&gt;&lt;TD&gt;rule2&lt;/TD&gt;&lt;TD&gt;2022-02-01&lt;/TD&gt;&lt;TD&gt;Match&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;{"rule_name":"rule3","policy_name":"policy3","since":"2022-03-01","status":"expired"}&lt;/TD&gt;&lt;TD&gt;policy3&lt;/TD&gt;&lt;TD&gt;rule3&lt;/TD&gt;&lt;TD&gt;2022-03-01&lt;/TD&gt;&lt;TD&gt;expired&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;{"rule_name":"rule4","policy_name":"policy4","since":"2022-04-01","status":"revoked"}&lt;/TD&gt;&lt;TD&gt;policy4&lt;/TD&gt;&lt;TD&gt;rule4&lt;/TD&gt;&lt;TD&gt;2022-04-01&lt;/TD&gt;&lt;TD&gt;revoked&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;</description>
    <pubDate>Tue, 20 Sep 2022 10:03:07 GMT</pubDate>
    <dc:creator>yuanliu</dc:creator>
    <dc:date>2022-09-20T10:03:07Z</dc:date>
    <item>
      <title>Forescout nested json- How do I categorize the nested json objects into fields within the array?</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Forescout-nested-json-How-do-I-categorize-the-nested-json/m-p/613250#M213122</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;I am currently working on a use case which has complex ingested data with nested json. The data I am trying to capture is non compliant. I am looking for guidance on how to categorize the nested json objects into fields within the array. Here is the redacted information I currently have, thank you!&lt;/P&gt;
&lt;P&gt;Search I am using:&lt;BR /&gt;&lt;STRONG&gt;index=fsctcenter sourcetype=fsctcenter_json&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;| regex "Non Compliant[^\:]+\:\"\d+\"\,\"status\":\"Match"&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;| rex field=_raw "policy_name\":\"(?&amp;lt;policy_name&amp;gt;[a-zA-z1-9\.\s+]+Non\sCompliant[^\"]+)"&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;| rex field=_raw "rule_name\":\"(?&amp;lt;rule_name&amp;gt;[a-zA-z1-9\.\s+]+Non\sCompliant[^\"]+)"&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Raw:&lt;/P&gt;
&lt;P&gt;{"ctupdate":"policyinfo","ip":"X.X.X.X","policies":[{"rule_name":"XXXX","policy_name":"XXXX","since":"XXXX","status":"XXXX"},{"rule_name":"XXXX","policy_name":"XXXX","since":"XXXX","status":"XXXX"},{"rule_name":"XXXX","policy_name":"XXXX","since":"XXXX","status":"XXXX"},{"rule_name":"XXXX","policy_name":"XXXX","since":"XXXX","status":"XXXX"},...etc&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;List:&lt;/P&gt;
&lt;P&gt;policies: [ [-]&lt;BR /&gt;{ [-]&lt;BR /&gt;policy_name: XXXX&lt;BR /&gt;rule_name: XXXX&lt;BR /&gt;since: XXXX&lt;BR /&gt;status: XXXX&lt;BR /&gt;}&lt;BR /&gt;{ [-]&lt;BR /&gt;policy_name: XXXX&lt;BR /&gt;rule_name: XXXX&lt;BR /&gt;since: XXXX&lt;BR /&gt;status: XXXX&lt;BR /&gt;}&lt;BR /&gt;Etc...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Currently Splunk ES is not itemizing the fields correctly for the nested json above. Any help or guidance would be greatly appreciated, thanks!&lt;/P&gt;</description>
      <pubDate>Thu, 15 Sep 2022 15:25:18 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Forescout-nested-json-How-do-I-categorize-the-nested-json/m-p/613250#M213122</guid>
      <dc:creator>Foss</dc:creator>
      <dc:date>2022-09-15T15:25:18Z</dc:date>
    </item>
    <item>
      <title>Re: Forescout nested json- How do I categorize the nested json objects into fields within the array?</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Forescout-nested-json-How-do-I-categorize-the-nested-json/m-p/613748#M213306</link>
      <description>&lt;P&gt;First of all, it is rarely good to use regex to handle structured data like JSON. &amp;nbsp;Splunk has far more powerful tools. &amp;nbsp;Second, you really want to illustrate fake/anonymized data in a way that can exemplify your desired outcome. &amp;nbsp;Third, it is always good to illustrate your desired outcome.&lt;/P&gt;&lt;P&gt;The following illustration is based on my speculation of your requirement.&lt;/P&gt;&lt;P&gt;Raw data:&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;{"ctupdate":"policyinfo","ip":"X.X.X.X","policies":[{"rule_name":"rule1","policy_name":"policy1","since":"2022-01-01","status":"Match"},{"rule_name":"rule2","policy_name":"policy2","since":"2022-02-01","status":"Match"},{"rule_name":"rule1","policy_name":"policy1","since":"2022-03-01","status":"expired"},{"rule_name":"rule4","policy_name":"policy4","since":"2022-04-01","status":"revoked"}]}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;With this, Splunk should already have these fields extracted:&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="81.40625px" height="25px"&gt;ctupdate&lt;/TD&gt;&lt;TD width="61.65625px" height="25px"&gt;ip&lt;/TD&gt;&lt;TD width="174.296875px" height="25px"&gt;&lt;DIV class=""&gt;policies{}.policy_name&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="158.796875px" height="25px"&gt;&lt;DIV class=""&gt;policies{}.rule_name&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="119.90625px" height="25px"&gt;&lt;DIV class=""&gt;policies{}.since&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="105.703125px" height="25px"&gt;&lt;DIV class=""&gt;policies{}.status&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="81.40625px" height="91px"&gt;policyinfo&lt;/TD&gt;&lt;TD width="61.65625px" height="91px"&gt;X.X.X.X&lt;/TD&gt;&lt;TD width="174.296875px" height="91px"&gt;&lt;DIV class=""&gt;policy1&lt;/DIV&gt;&lt;DIV class=""&gt;policy2&lt;/DIV&gt;&lt;DIV class=""&gt;policy3&lt;/DIV&gt;&lt;DIV class=""&gt;policy4&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="158.796875px" height="91px"&gt;&lt;DIV class=""&gt;rule1&lt;/DIV&gt;&lt;DIV class=""&gt;rule2&lt;/DIV&gt;&lt;DIV class=""&gt;rule3&lt;/DIV&gt;&lt;DIV class=""&gt;rule4&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="119.90625px" height="91px"&gt;&lt;DIV class=""&gt;2022-01-01&lt;/DIV&gt;&lt;DIV class=""&gt;2022-02-01&lt;/DIV&gt;&lt;DIV class=""&gt;2022-03-01&lt;/DIV&gt;&lt;DIV class=""&gt;2022-04-01&lt;/DIV&gt;&lt;/TD&gt;&lt;TD width="105.703125px" height="91px"&gt;&lt;DIV class=""&gt;Match&lt;/DIV&gt;&lt;DIV class=""&gt;Match&lt;/DIV&gt;&lt;DIV class=""&gt;expired&lt;/DIV&gt;&lt;DIV class=""&gt;revoked&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;(Even if these fields are not extracted, they can be extracted with &lt;A href="https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Spath" target="_blank" rel="noopener"&gt;spath&lt;/A&gt; command.)&lt;/P&gt;&lt;P&gt;I further speculate that you want to access elements of policies{}. &amp;nbsp;This can be achieved with spath command with path parameter:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| spath path=policies{}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This should give you an additional multivalue field policies{} like&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;DIV class=""&gt;policies{}&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;DIV class=""&gt;{"rule_name":"rule1","policy_name":"policy1","since":"2022-01-01","status":"Match"}&lt;/DIV&gt;&lt;DIV class=""&gt;{"rule_name":"rule2","policy_name":"policy2","since":"2022-02-01","status":"Match"}&lt;/DIV&gt;&lt;DIV class=""&gt;{"rule_name":"rule3","policy_name":"policy3","since":"2022-03-01","status":"expired"}&lt;/DIV&gt;&lt;DIV class=""&gt;{"rule_name":"rule4","policy_name":"policy4","since":"2022-04-01","status":"revoked"}&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;To operate on individual elements in the array, use &lt;A href="https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Mvexpand" target="_blank" rel="noopener"&gt;mvexpand&lt;/A&gt;&amp;nbsp;followed by another spath, i.e.,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| spath path=policies{}
| mvexpand policies{}
| spath input=policies{}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This will generate one event per value of policies{}, like this&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;policies{}&lt;/TD&gt;&lt;TD&gt;policy_name&lt;/TD&gt;&lt;TD&gt;rules_name&lt;/TD&gt;&lt;TD&gt;since&lt;/TD&gt;&lt;TD&gt;status&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;{"rule_name":"rule1","policy_name":"policy1","since":"2022-01-01","status":"Match"}&lt;/TD&gt;&lt;TD&gt;policy1&lt;/TD&gt;&lt;TD&gt;rule1&lt;/TD&gt;&lt;TD&gt;2022-01-01&lt;/TD&gt;&lt;TD&gt;Match&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;{"rule_name":"rule2","policy_name":"policy2","since":"2022-02-01","status":"Match"}&lt;/TD&gt;&lt;TD&gt;policy2&lt;/TD&gt;&lt;TD&gt;rule2&lt;/TD&gt;&lt;TD&gt;2022-02-01&lt;/TD&gt;&lt;TD&gt;Match&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;{"rule_name":"rule3","policy_name":"policy3","since":"2022-03-01","status":"expired"}&lt;/TD&gt;&lt;TD&gt;policy3&lt;/TD&gt;&lt;TD&gt;rule3&lt;/TD&gt;&lt;TD&gt;2022-03-01&lt;/TD&gt;&lt;TD&gt;expired&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;{"rule_name":"rule4","policy_name":"policy4","since":"2022-04-01","status":"revoked"}&lt;/TD&gt;&lt;TD&gt;policy4&lt;/TD&gt;&lt;TD&gt;rule4&lt;/TD&gt;&lt;TD&gt;2022-04-01&lt;/TD&gt;&lt;TD&gt;revoked&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;</description>
      <pubDate>Tue, 20 Sep 2022 10:03:07 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Forescout-nested-json-How-do-I-categorize-the-nested-json/m-p/613748#M213306</guid>
      <dc:creator>yuanliu</dc:creator>
      <dc:date>2022-09-20T10:03:07Z</dc:date>
    </item>
  </channel>
</rss>

