TGViewer
DevOps для ДевоПсов DevOps для ДевоПсов @devo_pes · 3.22K subscribers
Post #7835 3.32K
jsongrep — быстрее чем jq, jmespath, jsonpath-rust и jql?

Студент вдохновился историей рипгрепа и сделал инструмент для поиска значений в JSON-документах. Концептуально он делает то же, что и grep для текста: скармливаете JSON, даёте паттерн, получаете все значения, пути к которым попадают под этот паттерн («достань мне все поля error из логов за сегодня»).

Язык запросов выглядит как смесь JSONPath и регулярных выражений. Если вы когда-нибудь писали регулярки для путей в файловой системе или URL, то тут всё очень похоже, только вместо символов у вас ключи и индексы.

Зачем это нужно

Если вы работаете с большими JSON-файлами, то рано или поздно сталкиваетесь с задачей «достань мне все значения по такому-то пути». jq для этого подходит, но он тяжеловесный: это полноценный язык трансформации, интерпретатор, который на каждом шаге оценивает выражения, проверяет условия, рекурсивно обходит дерево. Для простого поиска это оверкилл.

jsongrep сознательно ограничен: он не умеет трансформировать данные, нет арифметики, нет фильтров, нет строковой интерполяции. Зато за счёт этого он работает на порядок быстрее на больших документах, что подтверждают бенчмарки автора: на 190-мегабайтном GeoJSON файле он обходит jq в end-to-end тестах с внушительным отрывом.

Кейсы применения

— Анализ логов в JSON-формате. jsongrep с флагом -F делает рекурсивный поиск поля на любой глубине одной командой.

— Работа с API-ответами. curl + jsongrep быстрее, чем открывать Postman или писать jq-ванлайнер для простой выборки.

— GeoJSON и прочие большие структурированные файлы. Например для городских служб, геодезистов, GIS-специалистов, которым нужно быстро извлекать данные из таких файлов без загрузки всего документа в память.

Почему так быстро

Автор учил теорию автоматов, технические детали можно почитать в статье. Если упростить, нет никаких if-else цепочек, нет рекурсивного спуска с проверкой условий на каждом узле. Неподходящая ветка дерева отсекается за O(1) — просто нет перехода в таблице.

Есть и цена за эту скорость: компиляция запроса в DFA занимает время. На маленьких документах jq может оказаться быстрее просто потому, что не тратит время на построение автомата. Но на документах от мегабайта и выше jsongrep начинает выигрывать.

Инструмент новый, студенческий, в бою ещё не протестирован, но как минимум ставим лайк за научный подход.

https://github.com/micahkepe/jsongrep
  • 👍 5
More from @devo_pes
  1. Sep 20, 2026ACME отработал с кодом 0, а пользователи всё ещё получают старый сертификат Cron обновил с…
  2. Sep 20, 2026Зелёный CI не ловит деградацию под трафиком, зато её ловит канарейка с автооткатом Функцио…
  3. Sep 20, 2026Что проверить перед запуском приложения в Kubernetes Pod может запуститься, а обновление и…
  4. Sep 19, 2026Как выбрать инструменты для анализа производительности Linux При инциденте на Linux-хосте…
  5. Sep 19, 2026OpenTelemetry бесплатен ровно до дня, когда вы начали его эксплуатировать Стандарт снял пр…
  6. Sep 19, 2026Как измерить и сократить toil в эксплуатации Google SRE определяет toil как поток повторяю…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →