1.9Kпросмотров
55.0%от подписчиков
23 марта 2026 г.
questionScore: 2.1K
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