jsongrep: инструмент для запросов к JSON на основе DFA, превосходящий jq в тестах производительности

Что делает jsongrep
jsongrep (бинарный файл jg) принимает запрос и JSON-ввод и выводит каждое значение, путь которого в документе соответствует запросу. Он рассматривает JSON-документы как деревья, где объекты и массивы являются ветвями, скалярные значения — листьями, а ключи и индексы обозначают рёбра. Язык запросов представляет собой регулярный язык над алфавитом ключей и индексов.
Возможности языка запросов
Точечные пути выбирают вложенные поля по имени: jg 'roommates[0].name' возвращает roommates.[0].name: "Alice".
Подстановочные знаки соответствуют любому отдельному ключу (*) или любому индексу массива ([*]): jg 'favorite_drinks[*]' возвращает все элементы массива.
Альтернация (|) соответствует любой из ветвей: jg 'name | roommates' возвращает оба поля.
Рекурсивный спуск использует * и [*] внутри звёздочки Клини для обхода на произвольную глубину: jg '(* | [*])*.name' находит каждое поле name на любой глубине. Флаг -F предоставляет сокращённую запись: jg -F name делает то же самое.
Опциональный элемент (?) соответствует нулю или одному вхождению: jg 'roommates[0].favorite_food?' возвращает как родительский объект, так и значение поля.
Технический подход
jsongrep компилирует запросы в детерминированные конечные автоматы (ДКА) с использованием конвейера, который включает: разбор запроса, рассмотрение JSON как дерева, построение НКА с помощью алгоритма Глушкова, детерминизацию через построение подмножеств и поиск с использованием DFS с переходами ДКА. Это позволяет обрабатывать данные за один проход с O(1) работой на каждый входной символ, избегая возвратов, рекурсивных стеков и экспоненциального взрыва на проблемных запросах.
Автор отмечает, что это фундаментально отличается от таких инструментов, как jq, jmespath или jsonpath-rust, которые интерпретируют выражения путей, вычисляют запросы в каждом узле, проверяют предикаты и рекурсивно спускаются — потенциально повторно посещая поддеревья или поддерживая списки задач с рекурсивными запросами спуска.
Установка и доступность
Установите из crates.io: cargo install jsongrep. Как и ripgrep (который вдохновил проект), jsongrep является кроссплатформенным, с доступными бинарными файлами и написан на Rust.
Инструмент определяет, направлен ли вывод в команды типа less или sort, и по умолчанию опускает пути JSON (можно переопределить с помощью опции --with-path).
📖 Read the full source: HN LLM Tools
👀 Смотрите также

Масштабирование автоисследований Карпати с 16 GPU: Результаты и методы
Команда SkyPilot предоставила Claude Code доступ к 16 GPU в кластере Kubernetes для запуска проекта Autoresearch Карпати. За 8 часов агент отправил около 910 экспериментов, снизил валидационные биты на байт с 1,003 до 0,974 (улучшение на 2,87%) и достиг наилучшего значения потерь на валидации в 9 раз быстрее, чем при последовательном выполнении.

Сообщество выпустило патч, добавляющий поддержку языков с письмом справа налево в Claude Desktop для Windows.
Разработчик создал патч, добавляющий правильную поддержку языков с письмом справа налево в Claude Desktop для Windows, исправляя некорректное отображение для иврита, арабского и других RTL-языков. Патч внедряет логику определения RTL в рендерер Electron-приложения и включает функции резервного копирования и восстановления.

nan-forget: Локальная память для ИИ-кодирования в одном файле SQLite
nan-forget — это инструмент памяти для ИИ-агентов программирования, который хранит контекст в одном файле SQLite (~3 МБ) без фоновых служб. Он использует трёхэтапный конвейер извлечения данных и работает в Claude Code, Cursor и терминале через CLI.

Deblank: Инструмент для Удаления Форматирования Кода с Целью Сокращения Токенов для LLM
Deblank — это инструмент с открытым исходным кодом, который удаляет форматирование кода (отступы, пробелы, переносы строк) перед отправкой в LLM, сокращая количество токенов примерно на 30% для Java/C++ и на 9% для Python с задержкой около 76 мс. Поддерживает Python, Java, C/C++, C#, JS/TS и Go.