提问者:小点点

具有多个输入的Apache Nifi评估JsonPath


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

JSON顶部传感器的对象是{"Top_Data":"value"}

JSON底部传感器的对象是{"Bottom_Data":"value"}

我目前使用两个独立的EvalateJsonPath处理器来存储Top_DataBottom_Data的值在一个名为SensorData的属性中。

我如何使用某种if/or语句来只使用一个处理器来评估我可以从MQTT获得的两个JSON对象的JsonPath?基本上,我想有一个表达式,它说"如果我的JSON对象有一个名为Top_Data的属性,使用它的值作为属性传感器数据,否则,使用属性Bottom_Data的值。"

我的EvalateJsonPath处理器示例


共2个答案

匿名用户

也许尝试JSONPath表达式

$[Top_Data,Bottom_Data]

根据https://goessner.net/articles/JsonPath/有可能使用替代运算符[,]

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

我已经使用http://jsonpath.com/测试了表达式,它应该可以工作。

如果有帮助,请告诉我们。

匿名用户

您可以尝试使用EvalateJsonPath(属性1:top:$['top'],属性2:down:$['top'])来提取它们,当然不要忘记将目标设置为流文件属性

然后,转移到UpdateAt的属性并设置属性finalData${top: ifElse(${top},${top})}

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