1
votes

In NiFi I'm processing a flowfile containing the following attribute:

Key: 'my_array'
    Value: '[u'firstElement', u'secondElement']'

I'd like to split flowFile on this array to process each element separately (and then merge). I tried to use SplitJson processor, but it requires JSON content to operate on, so I used AttributesToJSON before it. Unfortunately the produced flowFile's content is:

{"my_array": "[u'firstElement', u'secondElement'"}

And I receive the error

The evaluated value [u'firstElement', u'secondElement'] of $['my_array'] was not a JSON Array compatible type and cannot be split.

Is it possible to convert my_array string to the correct JSON array? Do I need to use ExecuteScript or is there some simpler way?

2
the [u'firstElement', u'secondElement'] has not a valid json format. i think it's a kind of python formatting. - daggett
Yes, these values come from Python, but I think that the main problem is having "[u'firstElement', u'secondElement']" instead of [u'firstElement', u'secondElement'] - trivelt
with doublequotes - it's just a string. without - not a valid json. could you produce json from python? - daggett
I tried to convert it to the list in Python, but it causes error org.python.core.PyList cannot be cast to java.lang.String , so it seems that Python script has to return string. - trivelt
use json.dumps(...) to convert python data to json-formatted string - daggett

2 Answers

3
votes

How about ReplaceText with Replacement Strategy of Always Replace and Replacement Value of ${my_array} and then SplitJSON? This will replace your FlowFile's content with this attribute's value and then you could SplitJSON on it.

0
votes

Suppose I want to string : "Hashtags": "['tag1','tag2']" (as part of my resultant json in Nifi,) to be changed into : "Hashtags": ['tag1','tag2'].

what I do is :

Apache Nifi replaceText sample

I use ReplaceText with Replacement Strategy : Regex Replace and Replacement Value : a regex Expression. This will replace FlowFile's matched content with this attribute's value and then you could continue your process.