<?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: How do I create a nested JSON from a flat JSON that conforms to my schema in NiFi? in Support Questions</title>
    <link>https://community.cloudera.com/t5/Support-Questions/How-do-I-create-a-nested-JSON-from-a-flat-JSON-that-conforms/m-p/238656#M200467</link>
    <description>&lt;P&gt;&lt;A rel="user" href="https://community.cloudera.com/users/641/mburgess.html" nodeid="641"&gt;@Matt Burgess&lt;/A&gt; I certainly need some practice using the Jolt spec, but this does exactly what I needed.  Thank you for you help!&lt;/P&gt;</description>
    <pubDate>Fri, 19 Apr 2019 02:50:13 GMT</pubDate>
    <dc:creator>rstewart</dc:creator>
    <dc:date>2019-04-19T02:50:13Z</dc:date>
    <item>
      <title>How do I create a nested JSON from a flat JSON that conforms to my schema in NiFi?</title>
      <link>https://community.cloudera.com/t5/Support-Questions/How-do-I-create-a-nested-JSON-from-a-flat-JSON-that-conforms/m-p/238654#M200465</link>
      <description>&lt;P&gt;I have the following example JSON in a flowfile (data has been randomly imputed for this example) :&lt;/P&gt;&lt;PRE&gt;{
"TrackingRequestFirstIp":"192.10.01.01",
"TrackingRequestLastIp":"100.120.123.456",
"TrackingRequestCreationTime":"05:49:55",
"TrackingRequestCreationDate":"20171013",
"TrackingRequestTrackingNumber":"12349876"
}&lt;/PRE&gt;&lt;P&gt;Here is my AVRO schema:&lt;/P&gt;&lt;PRE&gt;{
&amp;nbsp;&amp;nbsp;"name":&amp;nbsp;"IpReports",
&amp;nbsp;&amp;nbsp;"type":&amp;nbsp;"record",
&amp;nbsp;&amp;nbsp;"namespace":&amp;nbsp;"com.acme.avro",
&amp;nbsp;&amp;nbsp;"fields": [
&amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"DataSourceInformation",&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"type":{
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"type":"map",&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"values": {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"name":"DataSourceInformation",
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"type":"record",&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"fields": [
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":"DataSourceUuid",&amp;nbsp;"type":["null","string"],&amp;nbsp;"default":null},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":"DataOwnerUuid",&amp;nbsp;"type":["null","string"],&amp;nbsp;"default":null},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":"RecordUuid",&amp;nbsp;"type":["null","string"],&amp;nbsp;"default":null]
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }}
&amp;nbsp; &amp;nbsp; },
&amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestInformation",&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"type": {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"type":"map",&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"values": {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"name":"TrackingRequestInformation",
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"type":"record",
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;"fields": [
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestCreationTime",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["time_cst"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestCreationDate",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["date_cst"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestTrackingNumber",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["fedex_airbill"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestFirstIp",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["source_ip"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestLastIp",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["dest_ip"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestFirstCityName",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["source_ip_city"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestFirstIpLat",&amp;nbsp;"type":["null",&amp;nbsp;"double"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["source_ip_lat"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestFirstIpLong",&amp;nbsp;"type":["null",&amp;nbsp;"double"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["source_ip_long"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestFirstIpCountryName",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["source_ip_country"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestFirstIpCountryCode",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["source_ip_country_iso"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestFirstIpPostalCode",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["source_ip_country_postal"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestFirstIpGeoLocation",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["source_location"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestLastCityName",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["dest_ip_city"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestLastIpLat",&amp;nbsp;"type":["null",&amp;nbsp;"double"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["dest_ip_lat"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestLastIpLong",&amp;nbsp;"type":["null",&amp;nbsp;"double"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["dest_ip_long"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestLastIpCountryName",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["dest_ip_country"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestLastIpCountryCode",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["dest_ip_country_iso"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestLastIpPostalCode",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["dest_ip_country_postal"]},
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {"name":&amp;nbsp;"TrackingRequestLastIpGeoLocation",&amp;nbsp;"type":["null",&amp;nbsp;"string"],&amp;nbsp;"default":null,&amp;nbsp;"aliases":["dest_location"]}]
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }}
&amp;nbsp; &amp;nbsp; &amp;nbsp; }]
}&lt;/PRE&gt;&lt;P&gt;Further on in my nifi process group, I will be enriching the original JSON and adding the missing fields.&lt;/P&gt;&lt;P&gt;I would like to convert the original JSON above into the JSON below using my AVRO schema:&lt;/P&gt;&lt;PRE&gt;{ 
"DataSourceInformation": {
    "DataSourceUuid":null,
    "DataOwnerUuid":null,
    "RecordUuid":null
    },
"TrackingRequestInformation": { 
    "TrackingRequestFirstIp":"192.10.01.01", 
    "TrackingRequestLastIp":"100.120.123.456", 
    "TrackingRequestCreationTime":"05:49:55", 
    "TrackingRequestCreationDate":"20171013", 
    "TrackingRequestTrackingNumber":"12349876",
    "TrackingRequestFirstIpLat":null,
    "TrackingRequestFirstIpLong":null,
    ...   ...   ...   ...   ...
    "TrackingRequestLastIpGeoLocation":null
    }
}&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;However, when I use a convert record processor, I get the following output:&lt;/P&gt;&lt;PRE&gt;[ {
&amp;nbsp; "DataSourceInformation" : null,
&amp;nbsp; "TrackingRequestInformation" : null
} ]&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Any thoughts on what I am doing wrong or suggestions on how to correct it?&lt;/P&gt;</description>
      <pubDate>Fri, 19 Apr 2019 01:17:18 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/How-do-I-create-a-nested-JSON-from-a-flat-JSON-that-conforms/m-p/238654#M200465</guid>
      <dc:creator>rstewart</dc:creator>
      <dc:date>2019-04-19T01:17:18Z</dc:date>
    </item>
    <item>
      <title>Re: How do I create a nested JSON from a flat JSON that conforms to my schema in NiFi?</title>
      <link>https://community.cloudera.com/t5/Support-Questions/How-do-I-create-a-nested-JSON-from-a-flat-JSON-that-conforms/m-p/238655#M200466</link>
      <description>&lt;P&gt;Try JoltTransformJSON with the following spec:&lt;/P&gt;&lt;PRE&gt;[
&amp;nbsp; {
&amp;nbsp; &amp;nbsp; "operation": "shift",
&amp;nbsp; &amp;nbsp; "spec": {
&amp;nbsp; &amp;nbsp; &amp;nbsp; "*": "TrackingRequestInformation.&amp;amp;"
&amp;nbsp; &amp;nbsp; }
&amp;nbsp; },
&amp;nbsp; {
&amp;nbsp; &amp;nbsp; "operation": "default",
&amp;nbsp; &amp;nbsp; "spec": {
&amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestInformation": {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestFirstIp": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestLastIp": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestCreationTime": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestCreationDate": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestTrackingNumber": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestFirstCityName": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestFirstIpLat": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestFirstIpLong": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestFirstIpCountryName": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestFirstIpCountryCode": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestFirstIpPostalCode": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestFirstIpGeoLocation": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestLastCityName": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestLastIpLat": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestLastIpLong": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestLastIpCountryName": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestLastIpCountryCode": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestLastIpPostalCode": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "TrackingRequestLastIpGeoLocation": null
&amp;nbsp; &amp;nbsp; &amp;nbsp; },
&amp;nbsp; &amp;nbsp; &amp;nbsp; "DataSourceInformation": {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "DataSourceUuid": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "DataOwnerUuid": null,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "RecordUuid": null
&amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; }
&amp;nbsp; }
]&lt;/PRE&gt;&lt;P&gt;This spec moves the tracking data into TrackingRequestInformation, adds a default DataSourceInformation object, and adds any fields that aren't in the original input, seems to output what you describe above.  &lt;/P&gt;</description>
      <pubDate>Fri, 19 Apr 2019 02:15:44 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/How-do-I-create-a-nested-JSON-from-a-flat-JSON-that-conforms/m-p/238655#M200466</guid>
      <dc:creator>mburgess</dc:creator>
      <dc:date>2019-04-19T02:15:44Z</dc:date>
    </item>
    <item>
      <title>Re: How do I create a nested JSON from a flat JSON that conforms to my schema in NiFi?</title>
      <link>https://community.cloudera.com/t5/Support-Questions/How-do-I-create-a-nested-JSON-from-a-flat-JSON-that-conforms/m-p/238656#M200467</link>
      <description>&lt;P&gt;&lt;A rel="user" href="https://community.cloudera.com/users/641/mburgess.html" nodeid="641"&gt;@Matt Burgess&lt;/A&gt; I certainly need some practice using the Jolt spec, but this does exactly what I needed.  Thank you for you help!&lt;/P&gt;</description>
      <pubDate>Fri, 19 Apr 2019 02:50:13 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/How-do-I-create-a-nested-JSON-from-a-flat-JSON-that-conforms/m-p/238656#M200467</guid>
      <dc:creator>rstewart</dc:creator>
      <dc:date>2019-04-19T02:50:13Z</dc:date>
    </item>
    <item>
      <title>Re: How do I create a nested JSON from a flat JSON that conforms to my schema in NiFi?</title>
      <link>https://community.cloudera.com/t5/Support-Questions/How-do-I-create-a-nested-JSON-from-a-flat-JSON-that-conforms/m-p/238657#M200468</link>
      <description>&lt;P&gt;The JOLT DSL takes a lot of practice, but once it clicks, it's like seeing the Matrix lol. I'm no expert but I've put my time in &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 19 Apr 2019 09:21:08 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/How-do-I-create-a-nested-JSON-from-a-flat-JSON-that-conforms/m-p/238657#M200468</guid>
      <dc:creator>mburgess</dc:creator>
      <dc:date>2019-04-19T09:21:08Z</dc:date>
    </item>
  </channel>
</rss>

