3

我正在尝试在 Nifi 中使用 EvaluateJsonPath 处理器,但在使用 jayway jsonpath 语法时遇到了问题。我的对象如下所示:

{"text":"my stuff", "tags":["abc", "xyz", "beq"]}

我想根据标签路由消息 - 我希望包含“xyz”的所有内容都以一种方式路由,而不包含它的所有内容都以另一种方式路由。使用http://jsonpath.herokuapp.com/我一直在测试并试图找出基于包含匹配字符串数组的 json 对象进行过滤的语法。我可以根据明显的索引进行匹配(所以$.[?(@.tags[1] =~ /xyz/i)]工作得很好),但我不能保证标签字段中对象的顺序或数量。

有没有办法在 jayway json 模块中做到这一点?我看到根据我尝试过的 JSONPATH 中的数组中的字符串过滤 Json,但它似乎在上面的模拟器中不起作用。

4

1 回答 1

3

我不知道如何在一个 EvaluateJsonPath 处理器步骤中做到这一点。但这当然可以分两步完成:

  1. 使用 EvaluateJsonPath 从标签数组中过滤“xyz”标签,使用 JsonPath 表达式$.tags[?(@ =~ /xyz/i)],并将处理器返回类型设置为,json以便可以返回数组。这将导致["xyz"]匹配和[]不匹配的文件
  2. 使用 RouteOnAttribute 根据结果数组进行路由,表达式如${matchingTags:toLower():contains('xyz')}.

可能还值得考虑将 JSON 评估为针对正则表达式的文本以匹配标记。

于 2016-01-20T04:11:31.507 回答