170 похожих чатов

Вопрос не совсем Go, а скорее bash; но вообще вопрос

технологии открыт.
Кто-то подскажет, как можно кроме вот варианта по ссылке https://www.starkandwayne.com/blog/bash-for-loop-over-json-array-using-jq/
в bash пройтись по подмассиву из файла JSON и вывести определенные поля сущностей?
Решение по ссылке работает, но очень уж долго - занимает почти минуту для JSON на 3 мегабайта.

11 ответов

22 просмотра

Скрипт по ссылке заново парсит json на каждой итерации, проще всего наверное переписать скрипт на язык где можно распарсить json один раз и потом адресовать массив, например на го/питон

Elmanov-Anton Автор вопроса
jit.js
Скрипт по ссылке заново парсит json на каждой итер...

По идее на каждой итерации делается base64 decode и парсинг маленького куска, верно? странно что столько времени отнимает. Да, на го, конечно все залетало бы, но чтобы бинарь туда поставить, придется помучаться. Вообще дело происходит в azure devops, поэтому тоже смотрю на python - он там из коробки поддерживается наравне с bash.

А вы уверены, что вам надо через base64 прогонять все?

Elmanov-Anton Автор вопроса

я не уверен, но если это убрать, то вывод jq -r '.[]' будет в виде исходного json, даже с ключом -с, который вроде гарантирует приведение к однострочному режиму. цикл for row in запускается на каждую строку вывода jq, а так вывод многострочный, то получается работа не с цельными json-сущностями, а с их фрагментами - это практически бесполезно

Elmanov-Anton Автор вопроса

похоже дело не в строках, а в чем-то еще - выглядит, что jq выводит именно по 1 строке, но for с его результатами оперирует уже фрагментами строк

поставить себе консольную утилиту для работы с json какой-нить fx или jq ну или еще какую - их, в общем-то, довольно много

Elmanov-Anton Автор вопроса
Elmanov Anton
похоже дело не в строках, а в чем-то еще - выгляди...

Удалось избавиться от base64. Надо было отключить цветность вывода jq и также добавил его построчное чтение через read -r. cat 2.json | jq -M --compact-output -r '.[]' | while read -r line; do echo $failcount $line done так работает терпимо по времени

Elmanov-Anton Автор вопроса
Владимир Гришин
Сделайте что-то вроде jq [items[].name]

ларчик просто открывался. не хватило опыта сообразить, что и в самом jq есть и фильтр и формат вывода: cat 1.json | jq -M -r '.Results[0].Vulnerabilities[] | select(.Severity == "CRITICAL") | "\(.Title) \(.PrimaryURL) \(.Severity)"'

Отдельная структура, из интерфейса кастите и в неё это самое...

Elmanov-Anton Автор вопроса
🎄 Doe
Отдельная структура, из интерфейса кастите и в неё...

спасибо, jq как оказалось умеет все что нужно - и отфильтровать и вывести в нужном формате

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта