Используйте Nifi replaceText, чтобы поменять местами первое или последнее вхождение char/string с другой строкой?
Попытка добавить тег к входящему файлу 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"}]
Никогда не было хорошо в регулярном выражении...:(Может ли кто-нибудь помочь с правильной фразой для поиска и замены? Также, если кто-то может объяснить регулярное выражение и как группировка, это также поможет. Возможно, хороший справочник. Что такое хороший сайт для проверки и анализа конкретных выражений регулярных выражений?
РЕШЕНИЕ: Если это поможет кому-либо найти шаблон: Search Value: ^(.*?)[{ (Будет выполнять ленивый поиск до тех пор, пока не найдет первый '[{' и не сгруппирует вещи до 1 $), поэтому замена будет: $1{"nifi_received_ts_est":"${now():format("гггг-мм-дд ЧЧ: мм: сс.СС")}",
2 ответа
Изменить search value
в ^(\[\{)(.*)
в этом случае первая группа (\[\{)
будет соответствовать первым двум символам
и вторая группа (.*)
остальная часть строки
Я не уверен, почему вы пытаетесь использовать регулярное выражение здесь. Правильный подход заключается в том, чтобы декодировать строку 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;