尝试将标签添加到传入的nifi json流文件中。
输入:
[{"HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]
预期输出:
[{"nifi_received_ts_est":"2018-10-04 09:31:50.108","HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]
尝试了不同的方法,现在已经接近:
Search Value: ^([^\[]*)
Replacement Value: [{"nifi_received_ts_est":"${now():format("yyyy-MM-dd HH:mm:ss.SS")}"\,$2
Replacement Strategy: Regex Replace
Evaluation Mode: Entire Text
但是结果不是预期的。到达下面:
[{"nifi_received_ts_est":"2018-10-04 09:31:50.108",$2[{"HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]
对regexp从来都不是好事... :(有人可以帮助您搜索和替换正确的词组吗?另外,如果有人可以解释regexp以及如何进行分组也会有所帮助。也许是一个很好的备忘单参考。一个很好的网站来测试和解析nifi特定的regexp表达式?
解决方案: 如果可以帮助任何人找到该模式:Search Value:^(。*?)[{(将进行惰性搜索,直到找到第一个'[{'并将其之前的内容分组到$ 1)为止,因此替换将是:$ 1 {“ nifi_received_ts_est”: “ $ {now():format(” yyyy-MM-dd HH:mm:ss.SS“)}”,
答案 0 :(得分:4)
将search value
更改为^(\[\{)(.*)
在这种情况下,第一组(\[\{)
将与前两个符号匹配
,第二组(.*)
其余字符串
答案 1 :(得分:0)
我不确定您为什么在这里尝试使用正则表达式。正确的方法是将JSON字符串解码为Perl数据结构,将新数据添加到该结构中,然后将其编码回JSON。
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use JSON;
use Time::Piece;
my $json_parser = JSON->new;
my $json = '[{"HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]';
my $data = $json_parser->decode($json);
$data->[0]->{nifi_received_ts_est} =
localtime->strftime('%Y-%m-%d %H:%M:%S');
$json = $json_parser->encode($data);
say $json;