Apache nifi 具有多个输入的Apache Nifi EvaluateJsonPath

Apache nifi 具有多个输入的Apache Nifi EvaluateJsonPath,apache-nifi,json-path-expression,Apache Nifi,Json Path Expression,我有JSON对象通过MQTT从两个不同的输入进入Nifi——例如,假设一个来自顶部传感器,另一个来自底部传感器。每个传感器都有自己的MQTT主题,因此我使用两个不同的MQTT处理器将这些数据摄取到我的Nifi流中 top sensor的JSON对象是{top_Data:value} 底部传感器的JSON对象为{bottom_Data:value} 我目前正在使用两个独立的EvaluateJsonPath处理器在名为sensorData的属性中存储Top_数据或Bottom_数据的值 如何使用某种

我有JSON对象通过MQTT从两个不同的输入进入Nifi——例如,假设一个来自顶部传感器,另一个来自底部传感器。每个传感器都有自己的MQTT主题,因此我使用两个不同的MQTT处理器将这些数据摄取到我的Nifi流中

top sensor的JSON对象是{top_Data:value}

底部传感器的JSON对象为{bottom_Data:value}

我目前正在使用两个独立的EvaluateJsonPath处理器在名为sensorData的属性中存储Top_数据或Bottom_数据的值

如何使用某种if/or语句仅使用一个处理器来为我可以从MQTT获得的两个JSON对象计算JSONPATH?基本上,我希望有一个表达式,表示如果我的JSON对象有一个名为Top_Data的属性,则将其值用于属性sensorData,否则,使用属性Bottom_Data中的值


也许可以试试JSONPath表达式

$[Top_Data,Bottom_Data]
在单个EvaluateJSONPathProcessor中。 根据,有可能使用替代运算符[,]:

XPath中的[,]Union运算符会导致节点集的组合。JSONPath允许将备用名称或数组索引作为一个集合

我已经测试了使用的表达式,它应该工作


让我们知道这是否有帮助。

您可以尝试使用EvaluateJsonPathproperty 1:top:$['top'],property 2:bottom:$['bottom']提取它们,当然不要忘记将Destination设置为flowfile属性

然后,转移到UpdateAttribute并将属性finalData设置为${top:isEmpty:ifElse${bottom},${top}


如果EvaluateJsonPath找不到完整的元素,那么它会将其设置为空字符串,因此您需要做的只是检查其中一个是否为空,如果为空,则将最终数据设置为另一个。

它将不起作用。如果在union运算符中找不到任何元素,则将流文件传输到umatched关系,而不提取所需的数据。