<?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: Complex JSON (and Multivalue) processing in Splunk Search</title>
    <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606274#M210856</link>
    <description>&lt;P&gt;This will do the trick - using foreach&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| makeresults
| eval _raw="{
\"Name\": \"example\",
\"Tags\": [
 {\"Key\": \"Building\", \"Value\": \"1\"},
 {\"Key\": \"Floor\", \"Value\": \"2\"},
 {\"Key\": \"Color\", \"Value\": \"Red\"}
 ]
}"
| spath
| rename Tags{}.* as *
| foreach 0 1 2 3 4 5 6 7 8 9 10 [ eval k=mvindex(Key, &amp;lt;&amp;lt;FIELD&amp;gt;&amp;gt;), v=mvindex(Value, &amp;lt;&amp;lt;FIELD&amp;gt;&amp;gt;), x_{k}=v ]
| table name x_* 
| rename x_* as *&lt;/LI-CODE&gt;&lt;P&gt;just make the foreach loop big enough to accommodate the array length.&lt;/P&gt;&lt;P&gt;However, I do believe that's exactly what the app is designed to to more efficiently.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 20 Jul 2022 05:35:29 GMT</pubDate>
    <dc:creator>bowesmana</dc:creator>
    <dc:date>2022-07-20T05:35:29Z</dc:date>
    <item>
      <title>Complex JSON (and Multivalue) processing</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606225#M210832</link>
      <description>&lt;P&gt;I've been working on a project with JSON in the event where Tags are stored similar to this...&lt;/P&gt;&lt;DIV&gt;&lt;PRE&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;"Name"&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;"example"&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;"Tags"&lt;/SPAN&gt;&lt;SPAN&gt;: [&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;SPAN&gt;"Key"&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;"Building"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Value"&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;"1"&lt;/SPAN&gt;&lt;SPAN&gt;},&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;SPAN&gt;"Key"&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;"Floor"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Value"&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;"2"&lt;/SPAN&gt;&lt;SPAN&gt;},&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;SPAN&gt;"Key"&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;"Color"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Value"&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;"Red"&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; ]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;The default extract from spath provided the&amp;nbsp;&lt;SPAN&gt;Tags{}.Key and Tags{}.Value fields which were pretty much useless as-is. &amp;nbsp;&lt;/SPAN&gt;What I wanted was for each tag to be a field on the event so that you could use them in a search, ex. Building=1 AND Color=Red. &amp;nbsp;But the number of tags varies and the same value could appear in multiple tags (i.e. Building=1 AND Floor=1).&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Here's what I came up with so far... I'm curious if anyone has a better suggestion.&lt;/P&gt;&lt;P&gt;| rename Tags{}.Key as Key, Tags{}.Value as Value | eval zip=mvzip(Key,Value, ":") | mvexpand zip |rex field=zip mode=sed "s/$/\"}/g" |rex field=zip mode=sed "s/^/{\"tag./g"| rex field=zip mode=sed "s/:/\": \"/g" | spath input=zip | transaction Name&lt;/P&gt;&lt;P&gt;This approach basically uses mvzip and mvexpand to pull apart the Tags, then uses rex with sed to rebuild a JSON object to pass back through spath. &amp;nbsp;It seems pretty complex, but I just can't see a better way to do it.&lt;/P&gt;&lt;P&gt;I'm interested to hear if anyone has a better suggestion?&lt;/P&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 19 Jul 2022 18:58:55 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606225#M210832</guid>
      <dc:creator>jerewill</dc:creator>
      <dc:date>2022-07-19T18:58:55Z</dc:date>
    </item>
    <item>
      <title>Re: Complex JSON (and Multivalue) processing</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606250#M210846</link>
      <description>&lt;P&gt;This app may help you - developed by Brett Adams, a Splunk Trust member, it is designed to extract arrays of KV pairs from JSON arrays.&lt;/P&gt;&lt;P&gt;&lt;A href="https://splunkbase.splunk.com/app/6161/" target="_blank"&gt;https://splunkbase.splunk.com/app/6161/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 19 Jul 2022 22:46:01 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606250#M210846</guid>
      <dc:creator>bowesmana</dc:creator>
      <dc:date>2022-07-19T22:46:01Z</dc:date>
    </item>
    <item>
      <title>Re: Complex JSON (and Multivalue) processing</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606253#M210848</link>
      <description>&lt;P&gt;You shouldn't have to zip as the data is well contained. &amp;nbsp;Use &lt;FONT face="andale mono,times"&gt;path&lt;/FONT&gt; in &lt;A href="https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Spath" target="_blank" rel="noopener"&gt;spath&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;``` assuming field json contains that JSON object ```
| spath input=json path=Tags{}
| mvexpand Tags{}
| spath input=Tags{}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With sample data, you get&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Key&lt;/TD&gt;&lt;TD&gt;Tags{}&lt;/TD&gt;&lt;TD&gt;Value&lt;/TD&gt;&lt;TD&gt;_time&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Building&lt;/TD&gt;&lt;TD&gt;{"Key": "Building", "Value": "1"}&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2022-07-20 01:45:58&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Floor&lt;/TD&gt;&lt;TD&gt;{"Key": "Floor", "Value": "2"}&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2022-07-20 01:45:58&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Color&lt;/TD&gt;&lt;TD&gt;{"Key": "Color", "Value": "Red"}&lt;/TD&gt;&lt;TD&gt;Red&lt;/TD&gt;&lt;TD&gt;2022-07-20 01:45:58&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Does this look like something you want?&lt;/P&gt;</description>
      <pubDate>Wed, 20 Jul 2022 01:47:06 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606253#M210848</guid>
      <dc:creator>yuanliu</dc:creator>
      <dc:date>2022-07-20T01:47:06Z</dc:date>
    </item>
    <item>
      <title>Re: Complex JSON (and Multivalue) processing</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606259#M210849</link>
      <description>&lt;P&gt;Not quite…&lt;/P&gt;&lt;P&gt;I want one record that looks more like this…&lt;/P&gt;&lt;TABLE border="1" width="63.99886018237082%"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="20%"&gt;Name&lt;/TD&gt;&lt;TD width="20%"&gt;Building&lt;/TD&gt;&lt;TD width="20%"&gt;Floor&lt;/TD&gt;&lt;TD width="20%"&gt;Color&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="20%"&gt;example&lt;/TD&gt;&lt;TD width="20%"&gt;1&lt;/TD&gt;&lt;TD width="20%"&gt;2&lt;/TD&gt;&lt;TD width="20%"&gt;Red&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="20%"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD width="20%"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD width="20%"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD width="20%"&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The problem is that you can’t effectively search multiple tags with what you have there. &amp;nbsp;For example, I can search `Key=Floor AND Value=2` to get the second record of the mvexpand, but I can’t get a search that links them together. &amp;nbsp;I need to be able to do a search that is more like `Building=1 AND Floor=2` Does that make sense?&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Jul 2022 03:25:07 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606259#M210849</guid>
      <dc:creator>jerewill</dc:creator>
      <dc:date>2022-07-20T03:25:07Z</dc:date>
    </item>
    <item>
      <title>Re: Complex JSON (and Multivalue) processing</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606274#M210856</link>
      <description>&lt;P&gt;This will do the trick - using foreach&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| makeresults
| eval _raw="{
\"Name\": \"example\",
\"Tags\": [
 {\"Key\": \"Building\", \"Value\": \"1\"},
 {\"Key\": \"Floor\", \"Value\": \"2\"},
 {\"Key\": \"Color\", \"Value\": \"Red\"}
 ]
}"
| spath
| rename Tags{}.* as *
| foreach 0 1 2 3 4 5 6 7 8 9 10 [ eval k=mvindex(Key, &amp;lt;&amp;lt;FIELD&amp;gt;&amp;gt;), v=mvindex(Value, &amp;lt;&amp;lt;FIELD&amp;gt;&amp;gt;), x_{k}=v ]
| table name x_* 
| rename x_* as *&lt;/LI-CODE&gt;&lt;P&gt;just make the foreach loop big enough to accommodate the array length.&lt;/P&gt;&lt;P&gt;However, I do believe that's exactly what the app is designed to to more efficiently.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Jul 2022 05:35:29 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606274#M210856</guid>
      <dc:creator>bowesmana</dc:creator>
      <dc:date>2022-07-20T05:35:29Z</dc:date>
    </item>
    <item>
      <title>Re: Complex JSON (and Multivalue) processing</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606277#M210858</link>
      <description>&lt;P&gt;That looks awfully like &lt;A href="https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Transpose" target="_blank" rel="noopener"&gt;transpose&lt;/A&gt;. &amp;nbsp;Would this work?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| spath input=json path=Tags{}
| mvexpand Tags{}
| spath input=Tags{}
| table Key Value
| transpose header_field=Key column_name=Name&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Name&lt;/TD&gt;&lt;TD&gt;Building&lt;/TD&gt;&lt;TD&gt;Floor&lt;/TD&gt;&lt;TD&gt;Color&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Value&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Red&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Wed, 20 Jul 2022 06:04:24 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606277#M210858</guid>
      <dc:creator>yuanliu</dc:creator>
      <dc:date>2022-07-20T06:04:24Z</dc:date>
    </item>
    <item>
      <title>Re: Complex JSON (and Multivalue) processing</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606351#M210883</link>
      <description>&lt;P&gt;That doesn't seem to work for me. &amp;nbsp;The table before the transpose looks like this...&lt;/P&gt;&lt;TABLE border="1" width="100%"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="33.333333333333336%"&gt;Name&lt;/TD&gt;&lt;TD width="33.333333333333336%"&gt;Key&lt;/TD&gt;&lt;TD width="33.333333333333336%"&gt;Value&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="33.333333333333336%"&gt;example&lt;/TD&gt;&lt;TD width="33.333333333333336%"&gt;Building&lt;/TD&gt;&lt;TD width="33.333333333333336%"&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;example&lt;/TD&gt;&lt;TD&gt;Floor&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;example&lt;/TD&gt;&lt;TD&gt;Color&lt;/TD&gt;&lt;TD&gt;Red&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then the transpose turns the Name field into columns which, again, doesn't get something that can be well searched for things like (Building=1 AND Floor=2).&lt;/P&gt;</description>
      <pubDate>Wed, 20 Jul 2022 14:22:34 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606351#M210883</guid>
      <dc:creator>jerewill</dc:creator>
      <dc:date>2022-07-20T14:22:34Z</dc:date>
    </item>
    <item>
      <title>Re: Complex JSON (and Multivalue) processing</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606355#M210884</link>
      <description>&lt;P&gt;I do think that this seems like a good solution, but I think adding an application will have to be an alternative solution for me in this case. But this is very interesting and does do what I want very nicely. &amp;nbsp;I was not aware of it previously, so thank you.&lt;/P&gt;&lt;P&gt;array2object path="Tags" key=Key value=Value&lt;/P&gt;&lt;P&gt;Very easy.&lt;/P&gt;</description>
      <pubDate>Wed, 20 Jul 2022 14:55:50 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606355#M210884</guid>
      <dc:creator>jerewill</dc:creator>
      <dc:date>2022-07-20T14:55:50Z</dc:date>
    </item>
    <item>
      <title>Complex JSON (and Multivalue) processing</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606410#M210904</link>
      <description>&lt;P&gt;A different hack - similar idea to mvzip but looks more SPLy, is to use &lt;A href="https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/MultivalueEvalFunctions#mvmap.28X.2CY.29" target="_blank" rel="noopener"&gt;mvmap&lt;/A&gt; and&amp;nbsp;&lt;A href="https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Extract" target="_blank" rel="noopener"&gt;extract&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| rename Tags{}.* AS *
| eval ind = mvrange(0, mvcount(Key))
| eval pair=mvmap(ind, mvappend(pair, mvindex(Key, ind). "=" . mvindex(Value, ind)))
| rename _raw AS temp, pair AS _raw
| kv
| rename temp As _raw&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Output from the sample data is thus&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Name&lt;/TD&gt;&lt;TD&gt;Building&lt;/TD&gt;&lt;TD&gt;Floor&lt;/TD&gt;&lt;TD&gt;Color&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;example&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Red&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Thu, 21 Jul 2022 05:21:14 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Complex-JSON-and-Multivalue-processing/m-p/606410#M210904</guid>
      <dc:creator>yuanliu</dc:creator>
      <dc:date>2022-07-21T05:21:14Z</dc:date>
    </item>
  </channel>
</rss>

