首页 文章

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

提问于
浏览
0

我在NiFi中使用EvaluateJsonPath处理器来指定用于将我的JSON数据写入elasticsearch的复合主键 . 我必须通过连接两个属性来创建一个名为'key'的属性,让我们说'attr1'和'attr2' . 在EvaluateJsonPath配置中,我添加了一个值为'$ $ '的属性'key'(我使用此密钥来避免elasticsearch中的冗余) . 但我得到一个错误:'key'无效,因为指定的表达式无效:$ $ .

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

2 回答

  • 1

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

    • FlowFile attributes - 这些属性类似于FlowFile的元数据,如 filenamefilesizemime.type 等 . 当您使用像 UpdateAttribute 这样的处理器添加属性时,它们会被添加到FlowFile的元数据中,即FlowFile属性 not 到FlowFile内容本身 .

    • JSON attributes - 这些是FlowFile内容中的字段 . 例如: Name 是这里的属性 - > { "Name" : "Smith, John"}

    话虽如此,使用 ${projectName}, ${filename} 之类的表达式将根据 FlowFile attributes 进行评估 . 该语法称为NiFi表达语言 . 他们 won't be 根据FlowFile的内容进行评估 . EvaluateJsonPath 采用类似 $.Name 的JSON路径表达式

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

    {
        "attr1": "some value for attr1",
        "attr2": "some value for attr2"
    }
    

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

    attribute1 : $.attr1
    attribute2 : $.attr2
    

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

    Useful Links

  • 2

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

相关问题