字符串数组过滤器的 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 过程中完成:
- 使用 EvaluateJsonPath 从标签数组中过滤出 "xyz" 个标签,使用像
$.tags[?(@ =~ /xyz/i)]
这样的 JsonPath 表达式并设置处理器 return-type到 json
所以可以返回一个数组。这将导致匹配 ["xyz"]
和 non-matching 文件 []
- 使用 RouteOnAttribute 根据结果数组进行路由,表达式如
${matchingTags:toLower():contains('xyz')}
.
可能还值得考虑将 JSON 作为文本与正则表达式进行评估以匹配标签。
我正在尝试在 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 过程中完成:
- 使用 EvaluateJsonPath 从标签数组中过滤出 "xyz" 个标签,使用像
$.tags[?(@ =~ /xyz/i)]
这样的 JsonPath 表达式并设置处理器 return-type到json
所以可以返回一个数组。这将导致匹配["xyz"]
和 non-matching 文件 - 使用 RouteOnAttribute 根据结果数组进行路由,表达式如
${matchingTags:toLower():contains('xyz')}
.
[]
可能还值得考虑将 JSON 作为文本与正则表达式进行评估以匹配标签。