Regex для удаления определенного объекта из массива вместе с запятой, если за ним следует - PullRequest
0 голосов
/ 13 мая 2018

Я ищу регулярное выражение для удаления конкретного объекта json из массива объектов вместе с запятой, если за ним следует.

JSon Array

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

Я хочуудалить объект { "id" : "id3", "value" : "value3"} из вышеуказанного массива.Поскольку к нему добавлена ​​запятая (,), я хочу также удалить это, иначе массив будет не в формате json.

Опять же, это всего лишь пример.Массив может содержать n объектов.объект может приходить в любом порядке, он может быть на первом объекте, или находиться посередине, или на последнем объекте.

Итак, регулярное выражение должно проверять наличие запятой после объекта, а затем удалять объект с помощьюзапятая еще удалить только объект.

Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Я думаю, вы можете использовать QueryRecord процессор, который предлагает Apache NiFi. Вы можете найти более подробную информацию об этом процессоре здесь , но в целом это так: он позволяет запускать запрос SQL для содержимого потокового файла.

Таким образом, вы можете добавить динамическое отношение к QueryRecord с помощью оператора SQL, например:

SELECT * FROM FLOWFILE WHERE id <> 'id3'

Это выполняется для содержимого потокового файла, и только записи, чей id не равен id3, объединяются вместе и отправляются как потоковый файл в эту динамическую связь.

Этот подход позволяет избежать использования RegEx, что требует больших затрат на вычисления. Надеюсь, это поможет!

0 голосов
/ 13 мая 2018

Вот пример регулярного выражения, которое использует поле уникального идентификатора, чтобы найти нужный объект:

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

Пример его в действии: https://regex101.com/r/0tRs09/2/

Если вам нужноиспользуйте группу захвата, просто поставьте круглые скобки вокруг всего этого.

...