0

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

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

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

我目前正在使用两个单独的 EvaluateJsonPath 处理器来存储一个名为 sensorData 的属性的值Top_Data或其中一个。Bottom_Data

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

我的 EvaluateJsonPath 处理器示例

4

2 回答 2

1

也许尝试 JSONPath 表达式

$[Top_Data,Bottom_Data]

在单EvaluateJSONPathProcessor。根据https://goessner.net/articles/JsonPath/有可能使用备用运算符[,]

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

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

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

于 2019-03-09T06:43:12.503 回答
0

EvaluateJsonPath您可以尝试使用(property 1: top: $['top'], property 2: )提取它们bottom: $['bottom'],当然不要忘记设置Destinationflowfile-attribute.

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

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

于 2019-03-10T07:16:58.270 回答