I have JSON objects coming into Nifi via MQTT
from two different inputs - for instance, let's say one is from a top sensor, and one is from a bottom sensor. Each of the sensors has its own MQTT topic, so I am using two different ConsumeMQTT Processors to ingest this data into my Nifi Flow.
JSON Object for top sensor is {"Top_Data": "value"}
JSON Object for bottom sensor is {"Bottom_Data": "value"}
I am currently using two separate EvaluateJsonPath Processors to store either the value of Top_Data
or Bottom_Data
in an attribute called sensorData.
How can I use some kind of if/or statement to only use one processor to EvaluateJsonPath for both of the JSON objects I could get from MQTT? Basically, I want to have an expression that says "If my JSON object has a property called Top_Data, use its value for the attribute sensorData, otherwise, use the value from the property Bottom_Data."
You could try extracting them both using EvaluateJsonPath
(property 1: top: $['top']
, property 2: bottom: $['bottom']
) and of course don't forget to set Destination
to flowfile-attribute
.
Then, transfer to UpdateAttribute
and set property finalData
as ${top:isEmpty():ifElse(${bottom}, ${top})}
.
If EvaluateJsonPath
won't find a full element, then it will set it as empty string, so all you need to do is check if either of them is empty and if it is, set the final data as the other one.