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

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

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

11 ответов

21 просмотр

Скрипт по ссылке заново парсит 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 как оказалось умеет все что нужно - и отфильтровать и вывести в нужном формате

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

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

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...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта