字符串数组过滤器的 Jayway Jsonpath 语法?

Jayway Jsonpath syntax for string array filter?

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

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

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

有没有办法在 jayway json 模块中做到这一点?我看到 filter the Json according to string in an array in JSONPATH 我试过了,但它似乎在上面的模拟器中不起作用。

我不知道如何在一个 EvaluateJsonPath 处理器步骤中执行此操作。但它肯定可以在 two-step 过程中完成:

  1. 使用 EvaluateJsonPath 从标签数组中过滤出 "xyz" 个标签,使用像 $.tags[?(@ =~ /xyz/i)] 这样的 JsonPath 表达式并设置处理器 return-typejson 所以可以返回一个数组。这将导致匹配 ["xyz"] 和 non-matching 文件
  2. []
  3. 使用 RouteOnAttribute 根据结果数组进行路由,表达式如 ${matchingTags:toLower():contains('xyz')}.

可能还值得考虑将 JSON 作为文本与正则表达式进行评估以匹配标签。