正则表达式从数组中删除特定对象以及逗号(如果后面跟着它)

Regex to remove a specific object from an array along with comma if it is followed to it

我正在寻找一个正则表达式来从对象数组中删除特定的 json 对象以及逗号(如果后面跟着逗号)。

JSon数组

[ { "id" : "id1", "value" : "value1"},
  { "id" : "id2", "value" : "value2"},
  { "id" : "id3", "value" : "value3"},
  { "id" : "id4", "value" : "value4"} ]

我想从上面的数组中删除对象 { "id" : "id3", "value" : "value3"}。因为它附加了一个逗号 (,),所以我也想删除它,否则数组将不会是 json 格式。

同样,这只是示例。该数组可能包含 n 个对象。对象可以以任何顺序出现,它可能在第一个对象,或者在中间,或者最后一个对象。

所以,正则表达式应该检查对象后面是否有逗号,然后用逗号删除对象,否则只删除对象。

如有任何帮助,我们将不胜感激

这是使用唯一 ID 字段查找正确对象的正则表达式示例:

\h*{[^}]+?"id3"[^}]+?},?\h*\n?(?=]?)

实际示例:https://regex101.com/r/0tRs09/2/

如果您需要使用捕获组,只需将整个内容括起来即可。

我认为您可以使用 Apache NiFi 提供的 QueryRecord 处理器。您可以找到有关此处理器的更多详细信息 here 但一般情况是这样的:它允许您 运行 对流文件内容进行 SQL 查询。

因此您可以使用 SQL 语句向 QueryRecord 添加动态关系,例如:

SELECT * FROM FLOWFILE WHERE id <> 'id3'

这是针对流文件内容执行的,只有 id 不等于 id3 的记录被捆绑在一起并作为流文件发送到该动态关系。

这种方法避免了使用计算量大的 RegEx。希望这对您有所帮助!