технологии открыт.
Кто-то подскажет, как можно кроме вот варианта по ссылке https://www.starkandwayne.com/blog/bash-for-loop-over-json-array-using-jq/
в bash пройтись по подмассиву из файла JSON и вывести определенные поля сущностей?
Решение по ссылке работает, но очень уж долго - занимает почти минуту для JSON на 3 мегабайта.
Скрипт по ссылке заново парсит json на каждой итерации, проще всего наверное переписать скрипт на язык где можно распарсить json один раз и потом адресовать массив, например на го/питон
По идее на каждой итерации делается base64 decode и парсинг маленького куска, верно? странно что столько времени отнимает. Да, на го, конечно все залетало бы, но чтобы бинарь туда поставить, придется помучаться. Вообще дело происходит в azure devops, поэтому тоже смотрю на python - он там из коробки поддерживается наравне с bash.
А вы уверены, что вам надо через base64 прогонять все?
я не уверен, но если это убрать, то вывод jq -r '.[]' будет в виде исходного json, даже с ключом -с, который вроде гарантирует приведение к однострочному режиму. цикл for row in запускается на каждую строку вывода jq, а так вывод многострочный, то получается работа не с цельными json-сущностями, а с их фрагментами - это практически бесполезно
похоже дело не в строках, а в чем-то еще - выглядит, что jq выводит именно по 1 строке, но for с его результатами оперирует уже фрагментами строк
поставить себе консольную утилиту для работы с json какой-нить fx или jq ну или еще какую - их, в общем-то, довольно много
Удалось избавиться от base64. Надо было отключить цветность вывода jq и также добавил его построчное чтение через read -r. cat 2.json | jq -M --compact-output -r '.[]' | while read -r line; do echo $failcount $line done так работает терпимо по времени
Сделайте что-то вроде jq [items[].name]
ларчик просто открывался. не хватило опыта сообразить, что и в самом jq есть и фильтр и формат вывода: cat 1.json | jq -M -r '.Results[0].Vulnerabilities[] | select(.Severity == "CRITICAL") | "\(.Title) \(.PrimaryURL) \(.Severity)"'
Отдельная структура, из интерфейса кастите и в неё это самое...
спасибо, jq как оказалось умеет все что нужно - и отфильтровать и вывести в нужном формате
Обсуждают сегодня