Удалить элемент из массива JSON на основе совпадения строк в сценарии оболочки - PullRequest
0 голосов
/ 28 мая 2018

Я хочу удалить элемент JSON на основе совпадения строк, если он существует.

Я использую сценарий оболочки.

Пример ввода:

["https://test-ci.cmxdev.com/dev/AD-885/?oauth=callback",  
"https://test-ci.cmxdev.com/dev/INS-1676-a/?oauth=callback",  
"https://test-jdtest.cmxdev.com?oauth=callback",  
"https://localhost:3000?oauth=callback"]

Пример вывода (удален 2-й элемент):

["https://test-ci.cmxdev.com/dev/AD-885/?oauth=callback",   
"https://test-jdtest.cmxdev.com?oauth=callback",  
"https://localhost:3000?oauth=callback"]

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Я могу заставить работать, используя метод ниже.

Найти индекс действительной строки

callback_url_index=$(echo $json_output | jq -r '.UserPoolClient.CallbackURLs | index("https://test-jdtest.cmxdev.com?oauth=callback")');

Удалить элемент на основе найденного индекса

if [ "$callback_url_index" != null ] ; then
  callbackURLs=$(echo $json_output | jq -r --arg callback_url_index "$callback_url_index" '.UserPoolClient.CallbackURLs | del(.['$callback_url_index'])')

Спасибо!

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

Чтобы удалить все элементы из массива, равного определенному значению, вы можете «вычесть» значение (я) из массива:

. - [.[1]]

В противном случае обычным подходом будет перестроение и фильтрациямассив на основе условий, которые вы хотите.

map(select(. != "https://test-ci.cmxdev.com/dev/INS-1676-a/?oauth=callback"))
...