<?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 Re: Transform JSON array coming from ConsumeMQTT to key value pair for ingestion into influxDB in Support Questions</title>
    <link>https://community.cloudera.com/t5/Support-Questions/Transform-JSON-array-coming-from-ConsumeMQTT-to-key-value/m-p/345943#M234705</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;The string you are getting is not a valid json, so you need to use ExecuteScript Processor to parse the string and convert into array and then convert the array into json array. You can convert this string into array by removing curly brackets and then do split(',') then you can convert the array into json using something like:&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.javaguides.net/2019/07/convert-set-to-json-array-using-jackson.html" target="_blank" rel="noopener"&gt;https://www.javaguides.net/2019/07/convert-set-to-json-array-using-jackson.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Pass the converted Json Array as new flowfile from the ExecuteScript Processor. Lets assume that your json array looks like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;["1","1","1","3465689","B4:E6:2D:34:E1:D9"...]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then you use Json Jolt Processor and pass the following Jolt Spec:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[&lt;BR /&gt;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "operation": "shift",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "spec": {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "*": {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "@0": "Value-&amp;amp;0"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;which will give the new flowfile as follows:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;{&lt;BR /&gt;"Value-0" : "1",&lt;BR /&gt;"Value-1" : "1",&lt;BR /&gt;"Value-2" : "1",&lt;BR /&gt;"Value-3" : "3465689",&lt;BR /&gt;"Value-4" : "B4:E6:2D:34:E1:D9"&lt;/P&gt;&lt;P&gt;...&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hope that helps. If it does please accept solution.&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;Samer&lt;/P&gt;</description>
    <pubDate>Mon, 20 Jun 2022 13:07:04 GMT</pubDate>
    <dc:creator>SAMSAL</dc:creator>
    <dc:date>2022-06-20T13:07:04Z</dc:date>
    <item>
      <title>Transform JSON array coming from ConsumeMQTT to key value pair for ingestion into influxDB</title>
      <link>https://community.cloudera.com/t5/Support-Questions/Transform-JSON-array-coming-from-ConsumeMQTT-to-key-value/m-p/345930#M234700</link>
      <description>&lt;P&gt;Sensor data coming from ConsumeMQTT processor looks like this&lt;/P&gt;&lt;P&gt;{1,1,1,3465689,B4:E6:2D:34:E1:D9,BE:FB:E4:11:91:5A,-42,192.168.0.21,v0.16,15.88,16.35,46.59,95931.16,0,0,0,3.27,0,0,0,0}&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Expected Output:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; "val 1" : 1,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; "val 2" : 1,&lt;/P&gt;&lt;P&gt;.......}&lt;/P&gt;&lt;P&gt;and so&amp;nbsp; on&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm preparing this incoming sensor data to be ingested in influxdb kindly help me out which processor is best for this and required configuration&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks a lot&lt;/P&gt;</description>
      <pubDate>Mon, 20 Jun 2022 09:04:40 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/Transform-JSON-array-coming-from-ConsumeMQTT-to-key-value/m-p/345930#M234700</guid>
      <dc:creator>HTalha</dc:creator>
      <dc:date>2022-06-20T09:04:40Z</dc:date>
    </item>
    <item>
      <title>Re: Transform JSON array coming from ConsumeMQTT to key value pair for ingestion into influxDB</title>
      <link>https://community.cloudera.com/t5/Support-Questions/Transform-JSON-array-coming-from-ConsumeMQTT-to-key-value/m-p/345943#M234705</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;The string you are getting is not a valid json, so you need to use ExecuteScript Processor to parse the string and convert into array and then convert the array into json array. You can convert this string into array by removing curly brackets and then do split(',') then you can convert the array into json using something like:&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.javaguides.net/2019/07/convert-set-to-json-array-using-jackson.html" target="_blank" rel="noopener"&gt;https://www.javaguides.net/2019/07/convert-set-to-json-array-using-jackson.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Pass the converted Json Array as new flowfile from the ExecuteScript Processor. Lets assume that your json array looks like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;["1","1","1","3465689","B4:E6:2D:34:E1:D9"...]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then you use Json Jolt Processor and pass the following Jolt Spec:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[&lt;BR /&gt;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; "operation": "shift",&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "spec": {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "*": {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "@0": "Value-&amp;amp;0"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;which will give the new flowfile as follows:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;{&lt;BR /&gt;"Value-0" : "1",&lt;BR /&gt;"Value-1" : "1",&lt;BR /&gt;"Value-2" : "1",&lt;BR /&gt;"Value-3" : "3465689",&lt;BR /&gt;"Value-4" : "B4:E6:2D:34:E1:D9"&lt;/P&gt;&lt;P&gt;...&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hope that helps. If it does please accept solution.&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;Samer&lt;/P&gt;</description>
      <pubDate>Mon, 20 Jun 2022 13:07:04 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/Transform-JSON-array-coming-from-ConsumeMQTT-to-key-value/m-p/345943#M234705</guid>
      <dc:creator>SAMSAL</dc:creator>
      <dc:date>2022-06-20T13:07:04Z</dc:date>
    </item>
    <item>
      <title>Re: Transform JSON array coming from ConsumeMQTT to key value pair for ingestion into influxDB</title>
      <link>https://community.cloudera.com/t5/Support-Questions/Transform-JSON-array-coming-from-ConsumeMQTT-to-key-value/m-p/346327#M234841</link>
      <description>&lt;P&gt;&lt;a href="https://community.cloudera.com/t5/user/viewprofilepage/user-id/98665"&gt;@HTalha&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Another way to do this is to use the ExecuteScript processor with the following python script:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback
import json
import re

class SplitAndConvertToJson(StreamCallback):
  def __init__(self):
      pass

  def process(self, inputStream, outputStream):
      input = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
      input = re.sub(r'(^\s*\{\s*|\s*\}\s*)', '', input)
      fields = input.split(',')
      obj = dict([('val_%s' % (i,), v.rstrip()) for i, v in enumerate(fields)])
      outputStream.write(bytearray(json.dumps(obj).encode('utf-8')))

flowfile = session.get()
if(flowfile != None):
    flowfile = session.write(flowfile, SplitAndConvertToJson())
    session.transfer(flowfile, REL_SUCCESS)&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Cheers,&lt;/P&gt;&lt;P&gt;André&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 25 Jun 2022 05:44:11 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/Transform-JSON-array-coming-from-ConsumeMQTT-to-key-value/m-p/346327#M234841</guid>
      <dc:creator>araujo</dc:creator>
      <dc:date>2022-06-25T05:44:11Z</dc:date>
    </item>
  </channel>
</rss>

