Apache Nifi EvaluateJsonPath с несколькими входами - PullRequest
0 голосов
/ 08 марта 2019

У меня есть объекты JSON, поступающие в Nifi через MQTT с двух разных входов - например, скажем, один от верхнего датчика, а другой от нижнего датчика. Каждый из датчиков имеет свою тему MQTT, поэтому я использую два разных процессора ConsumeMQTT для ввода этих данных в мой поток Nifi.

JSON Object для верхнего датчика равен {"Top_Data": "value"}

Объект JSON для нижнего датчика равен {"Bottom_Data": "value"}

В настоящее время я использую два отдельных процессора EvaluateJsonPath для хранения значения Top_Data или Bottom_Data в атрибуте под названием sensorData.

Как я могу использовать какой-то оператор if / или, чтобы использовать только один процессор для EvaluateJsonPath для обоих объектов JSON, которые я мог получить из MQTT? По сути, я хочу иметь выражение, которое говорит: «Если у моего объекта JSON есть свойство Top_Data, используйте его значение для атрибута sensorData, в противном случае используйте значение из свойства Bottom_Data.»

Пример моего процессора EvaluateJsonPath

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Вы можете попробовать извлечь их, используя EvaluateJsonPath (свойство 1: top: $['top'], свойство 2: bottom: $['bottom']), и, конечно, не забудьте установить Destination на flowfile-attribute.

Затем перейдите к UpdateAttribute и установите для свойства finalData значение ${top:isEmpty():ifElse(${bottom}, ${top})}.

Если EvaluateJsonPath не найдет полный элемент, он установит его как пустую строку, поэтому все, что вам нужно сделать, это проверить, является ли один из них пустым, и если это так, установить окончательные данные как другие один.

0 голосов
/ 09 марта 2019

возможно попробуйте выражение JSONPath

$[Top_Data,Bottom_Data]

в сингле EvaluateJSONPathProcessor. Согласно https://goessner.net/articles/JsonPath/ существует возможность использования альтернативного оператора [,]:

[,] Оператор объединения в XPath приводит к комбинации наборов узлов. JSONPath позволяет использовать альтернативные имена или индексы массива в виде набора.

Я проверил выражение, используя http://jsonpath.com/, и оно должно работать.

Дайте нам знать, если это поможет.

...