Apache NiFi EvaluationJSONPath处理器:用于连接2个属性的JSONPath表达式

时间:2018-08-13 10:40:10

标签: apache-nifi json-path-expression

我正在NiFi中使用EvaluateJsonPath处理器来指定用于将JSON数据写入elasticsearch的复合主键。我必须通过连接两个属性来创建一个名为“ key”的属性,比如说“ attr1”和“ attr2”。在EvaluateJsonPath配置中,我添加了一个值为'$ {attr1} $ {attr2}'的属性'key'(我正在使用此密钥来避免Elasticsearch中的冗余)。但是我收到了类似的错误消息:'key'无效,因为指定的表达式无效:$ {attr1} $ {attr2}。

使用EvaluateJsonPath处理器将json记录中的2个属性串联起来的正确语法是什么?

2 个答案:

答案 0 :(得分:3)

我假设您将术语attributes与不同的上下文混合使用。当我第一次拿起NiFi并开始使用JSON时就做到了。为了弄清楚,在这种特殊情况下,有两种类型的属性:

  1. FlowFile属性-这些属性类似于FlowFile的元数据,例如filenamefilesize,{{1 }}等。当您使用mime.type之类的处理器添加属性时,它们将被添加到FlowFile的元数据中,即FlowFile属性不是到FlowFile内容本身。
  2. JSON属性-这些是FlowFile内容中的字段。例如:UpdateAttribute是此处的属性-> Name

话虽如此,使用{ "Name" : "Smith, John"}之类的表达式对${projectName}, ${filename}进行求值。该语法称为NiFi表达式语言。他们将不会根据FlowFile的内容进行评估。 FlowFile attributes采用JSON路径表达式,例如EvaluateJsonPath

因此,例如,假设您在FlowFile内容中具有以下JSON文档:

$.Name

在这种情况下,您必须为{ "attr1": "some value for attr1", "attr2": "some value for attr2" } 处理器配置新的属性,如下所示:

EvaluateJsonPath

完成后,通过attribute1 : $.attr1 attribute2 : $.attr2 的流文件会将上述两个属性添加到EvaluateJsonPath中,您可以使用NiFi Expression像flowfile attributes来读取它们。然后将${attribute1}处理器连接到EvaluateJsonPath处理器,您可以在UpdateRecord的帮助下将组合的组合键添加到FlowFile JSON内容。

有用链接

答案 1 :(得分:1)

EvaluateJsonPath需要一个JSONPath语句,在这种情况下,您似乎想要两个属性并使用NiFi表达式语言从中创建一个。如果是这样,那么UpdateAttribute应该就是您想要的。如果您希望将复合键插入到内容中,那么UpdateRecord应该就是您想要的。