<?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: NiFi JoltTransformJSON to convert camelCase to snake_case in Support Questions</title>
    <link>https://community.cloudera.com/t5/Support-Questions/NiFi-JoltTransformJSON-to-convert-camelCase-to-snake-case/m-p/350547#M236010</link>
    <description>&lt;P&gt;I have stolen to spec below from here:&amp;nbsp;&lt;A href="https://stackoverflow.com/questions/54696540/jolt-transformation-lowercase-all-keys" target="_blank" rel="noopener"&gt;https://stackoverflow.com/questions/54696540/jolt-transformation-lowercase-all-keys&lt;/A&gt;&amp;nbsp;which works in lowercasing all keys, however I ideally need the hyphens between the words.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // unwrap the keys and values into literal&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // "key" : "A", "value" : "b"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "operation": "shift",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "spec": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "*": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "$": "&amp;amp;1.key",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "@": "&amp;amp;1.value"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; },&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "operation": "modify-overwrite-beta",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "spec": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "*": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Now that the origional key&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; is on the "right hand side"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; lowercase it&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "key": "=toLower"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; },&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // pivot back, the now lowercased keys&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "operation": "shift",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "spec": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "*": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "value": "@(1,key)"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;]&lt;/P&gt;</description>
    <pubDate>Mon, 22 Aug 2022 15:16:14 GMT</pubDate>
    <dc:creator>Griggsy</dc:creator>
    <dc:date>2022-08-22T15:16:14Z</dc:date>
    <item>
      <title>NiFi JoltTransformJSON to convert camelCase to snake_case</title>
      <link>https://community.cloudera.com/t5/Support-Questions/NiFi-JoltTransformJSON-to-convert-camelCase-to-snake-case/m-p/350540#M236008</link>
      <description>&lt;P&gt;Within my NiFi flow I have a number of datasets, with various schemas where the 'key' of key value pairs are on camelCase but i want any incoming keys to be outputted in snake case, does anyone know what jolt spec i can use to achieve this?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Example input:&lt;/P&gt;&lt;P&gt;&lt;SPAN class="hljs-string"&gt;{&lt;/SPAN&gt;"aRandomFieldName":"Random Value"}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Required Output:&lt;/P&gt;&lt;P&gt;&lt;SPAN class="hljs-string"&gt;{&lt;/SPAN&gt;"a_random_field_name":"Random Value"}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Been struggling to achieve this using Jolt or replaceText processors, any assistance would be great.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance&lt;/P&gt;&lt;P&gt;Andy.&lt;/P&gt;</description>
      <pubDate>Mon, 22 Aug 2022 14:36:38 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/NiFi-JoltTransformJSON-to-convert-camelCase-to-snake-case/m-p/350540#M236008</guid>
      <dc:creator>Griggsy</dc:creator>
      <dc:date>2022-08-22T14:36:38Z</dc:date>
    </item>
    <item>
      <title>Re: NiFi JoltTransformJSON to convert camelCase to snake_case</title>
      <link>https://community.cloudera.com/t5/Support-Questions/NiFi-JoltTransformJSON-to-convert-camelCase-to-snake-case/m-p/350547#M236010</link>
      <description>&lt;P&gt;I have stolen to spec below from here:&amp;nbsp;&lt;A href="https://stackoverflow.com/questions/54696540/jolt-transformation-lowercase-all-keys" target="_blank" rel="noopener"&gt;https://stackoverflow.com/questions/54696540/jolt-transformation-lowercase-all-keys&lt;/A&gt;&amp;nbsp;which works in lowercasing all keys, however I ideally need the hyphens between the words.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // unwrap the keys and values into literal&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // "key" : "A", "value" : "b"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "operation": "shift",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "spec": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "*": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "$": "&amp;amp;1.key",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "@": "&amp;amp;1.value"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; },&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "operation": "modify-overwrite-beta",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "spec": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "*": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Now that the origional key&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; is on the "right hand side"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; lowercase it&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "key": "=toLower"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; },&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // pivot back, the now lowercased keys&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "operation": "shift",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "spec": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "*": {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "value": "@(1,key)"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;]&lt;/P&gt;</description>
      <pubDate>Mon, 22 Aug 2022 15:16:14 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/NiFi-JoltTransformJSON-to-convert-camelCase-to-snake-case/m-p/350547#M236010</guid>
      <dc:creator>Griggsy</dc:creator>
      <dc:date>2022-08-22T15:16:14Z</dc:date>
    </item>
    <item>
      <title>Re: NiFi JoltTransformJSON to convert camelCase to snake_case</title>
      <link>https://community.cloudera.com/t5/Support-Questions/NiFi-JoltTransformJSON-to-convert-camelCase-to-snake-case/m-p/350990#M236110</link>
      <description>&lt;P&gt;&lt;a href="https://community.cloudera.com/t5/user/viewprofilepage/user-id/77674"&gt;@Griggsy&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I don't know if there's a way to do exactly that with either JOLT or ReplaceText processors.&lt;/P&gt;&lt;P&gt;You can do it with ExecuteScript and the following Python script, though:&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

def to_snake_case(name):
    return re.sub(r'(?&amp;lt;!^)(?=[A-Z])', '_', name).lower()

def convert_keys_to_snake_case(obj):
    if isinstance(obj, list):
        return [convert_keys_to_snake_case(o) for o in obj]
    else:
        return {to_snake_case(k): v for k, v in obj.items()}

class PyStreamCallback(StreamCallback):
    def __init__(self):
        pass

    def process(self, inputStream, outputStream):
        text = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
        converted = convert_keys_to_snake_case(json.loads(text))
        outputStream.write(bytearray(json.dumps(converted).encode('utf-8','ignore')))

flow_file = session.get()
if flow_file != None:
    flow_file = session.write(flow_file, PyStreamCallback())
    session.transfer(flow_file, 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;</description>
      <pubDate>Sat, 27 Aug 2022 04:07:45 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/NiFi-JoltTransformJSON-to-convert-camelCase-to-snake-case/m-p/350990#M236110</guid>
      <dc:creator>araujo</dc:creator>
      <dc:date>2022-08-27T04:07:45Z</dc:date>
    </item>
    <item>
      <title>Re: NiFi JoltTransformJSON to convert camelCase to snake_case</title>
      <link>https://community.cloudera.com/t5/Support-Questions/NiFi-JoltTransformJSON-to-convert-camelCase-to-snake-case/m-p/351413#M236249</link>
      <description>&lt;P&gt;&lt;a href="https://community.cloudera.com/t5/user/viewprofilepage/user-id/11191"&gt;@araujo&lt;/a&gt;&amp;nbsp;thank you! I had gotten around the issue by using a replaceText loop to search for capitals within' the keys 1 at a time and prepend underscores, followed by a jolt to lowercase all keys.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Griggsy_0-1662112973053.png" style="width: 400px;"&gt;&lt;img src="https://community.cloudera.com/t5/image/serverpage/image-id/35442i947C3FFCFA91F0D0/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Griggsy_0-1662112973053.png" alt="Griggsy_0-1662112973053.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;You're script returns the same result, very impressed. Thanks again.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 02 Sep 2022 10:04:49 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Support-Questions/NiFi-JoltTransformJSON-to-convert-camelCase-to-snake-case/m-p/351413#M236249</guid>
      <dc:creator>Griggsy</dc:creator>
      <dc:date>2022-09-02T10:04:49Z</dc:date>
    </item>
  </channel>
</rss>

