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

Skn*_*Skn 2 apache-nifi json-path-expression

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

使用 EvaluateJsonPath 处理器连接 json 记录中的 2 个属性的正确语法是什么?

Siv*_*man 5

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

  1. FlowFile属性-这些是有点像属性的元数据的FlowFile,如filenamefilesizemime.type,等当您添加使用处理器的属性一样UpdateAttribute,他们被添加到FlowFile即FlowFile的元数据属性给FlowFile内容本身.
  2. JSON 属性- 这些是 FlowFile 内容中的字段。例如:Name这里是一个属性 ->{ "Name" : "Smith, John"}

话虽如此,使用像这样${projectName}, ${filename}的表达式是针对FlowFile attributes. 这种语法称为 NiFi 表达式语言。它们不会根据FlowFile 的内容进行评估。EvaluateJsonPath采用 JSON 路径表达式,如$.Name

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

{
    "attr1": "some value for attr1",
    "attr2": "some value for attr2"
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您必须EvaluateJsonPath使用如下所示的新属性配置处理器:

attribute1 : $.attr1
attribute2 : $.attr2
Run Code Online (Sandbox Code Playgroud)

完成后,通过的流文件EvaluateJsonPath将添加上述两个属性flowfile attributes,您可以使用 NiFi 表达式(如${attribute1}. 然后将EvaluateJsonPath处理器连接到UpdateRecord处理器,您可以NiFi Expression Language在 FlowFile JSON 内容的帮助下添加组合复合键。

有用的链接