У меня есть объекты JSON, поступающие в Nifi через MQTT с двух разных входов — например, скажем, один от верхнего датчика, а другой — от нижнего датчика. У каждого из датчиков есть своя тема MQTT, поэтому я использую два разных процессора ConsumeMQTT для загрузки этих данных в свой Nifi Flow.
JSON-объект для верхнего датчика {"Top_Data": "value"}
JSON-объект для нижнего датчика {"Bottom_Data": "value"}
В настоящее время я использую два отдельных процессора EvaluateJsonPath для хранения значения Top_Data или Bottom_Data в атрибуте с именем sensorData.
Как я могу использовать какой-то оператор if/or, чтобы использовать только один процессор для EvaluateJsonPath для обоих объектов JSON, которые я могу получить от MQTT? По сути, я хочу иметь выражение, которое говорит: «Если мой объект JSON имеет свойство с именем Top_Data, используйте его значение для атрибута sensorData, в противном случае используйте значение из свойства Bottom_Data».





возможно, попробуйте выражение JSONPath
$[Top_Data,Bottom_Data]
в сингле EvaluateJSONPathProcessor.
Согласно https://goessner.net/articles/JsonPath/ есть возможность использовать альтернативный оператор [,]:
[,]Union operator in XPath results in a combination of node sets. JSONPath allows alternate names or array indices as a set.
Я протестировал выражение, используя http://jsonpath.com/, и оно должно работать.
Дайте нам знать, если это поможет.
Вы можете попробовать извлечь их оба с помощью EvaluateJsonPath(свойство 1: top: $['top'], свойство 2: bottom: $['bottom']) и, конечно же, не забудьте установить Destination на flowfile-attribute.
Затем перейдите к UpdateAttribute и установите свойство finalData как ${top:isEmpty():ifElse(${bottom}, ${top})}.
Если EvaluateJsonPath не найдет полный элемент, то он установит его как пустую строку, поэтому все, что вам нужно сделать, это проверить, является ли один из них пустым, и если это так, установить окончательные данные как другой.
Это не сработает. Если он не может найти какие-либо элементы в операторе объединения, он передает отношение FlowFile to
umatchedбез извлечения необходимых данных.