LINUX.ORG.RU

jq 1.8.0

 , , ,

jq 1.8.0

1

3

1 июня, после почти полутора лет разработки, состоялся выпуск 1.8.0 библиотеки и консольной утилиты jq, предназначенных для обработки данных в формате JSON с использованием встроенного сверхвысокоуровневого функционального языка программирования. Код проекта написан на языке Си и распространяется по лицензии MIT.
Для регулярных выражений опционально может использоваться библиотека Oniguruma.
Начиная с этого выпуска, шаблон нумерации версий изменён на X.Y.Z.

Исправления ошибок безопасности:

  • CVE-2024-23337: исправлено целочисленное переполнение в функциях jvp_array_write и jvp_object_rehash. Теперь максимальный размер массивов и объектов установлен в 536870912 (2^29) элементов.
  • CVE-2024-53427: исправлен парсинг значений вида NaNчисло, например NaN1, NaN10 и т. п. Другие расширения JSON (подобные NaN, Infinity) остаются поддерживаемыми.
  • CVE-2025-48060: исправлено переполнение буфера в функции jv_string_vfmt.
  • Исправлено использование неинициализированного значения в функции check_literal
  • Исправлено падение в функциях strftime и strflocaltime.
  • Исправлено необработанное целочисленное переполнение в функции @base64d.

Изменения в консольной утилите:

  • Исправлено поведение ключа --indent 0, ранее неявно включавшего режим --compact-output.
  • Улучшены сообщения об ошибках парсинга.
  • Улучшена обработка длинных значений переменной среды JQ_COLORS, таких как truecolor.
  • Исправлено поведение --slurp --stream, когда входные данные не содержат завершающего символа новой строки.
  • Исправлена обработка пробелов при разборе чисел.
  • Максимальная глубина парсинга JSON увеличена до 10000.
  • Улучшено цветное форматирование вывода.
  • Другие незначительные изменения.

Изменения в языке:

  • Добавлены функции trim, ltrim, rtrim, trimstr(...), add(...), skip(..., ...), toboolean и формат @urid, обратный @uri.
  • Функции indices(...), index(...) и rindex(...) теперь в качестве индекса используют кодовые позиции Юникода. Используйте utf8bytelength для получения позиции байта.
  • Улучшена производительность и поведение функции tonumber, связанное с обработкой лидирующих и замыкающих пробельных символов. Для их удаления рекомендуется использовать функцию trim.
  • Улучшено форматирование времени в функциях strftime и strflocaltime.
  • Улучшена производительность функции bsearch(...), которая была переписана на Си.
  • Улучшена производительность функций unique и unique_by(...).
  • Удалена функция pow10. Вместо неё используйте функцию exp10.
  • Удалён приватный и недокументированный фильтр _nwise.
  • Исправлен приоритет унарных и бинарных арифметических операторов.
  • Добавлена поддержка многострочных комментариев в стиле Tcl (строка после # \ считается комментарием).
  • Исправлены ошибки в foreach и reduce.
  • Добавлена поддержка переносов строк CRLF в фильтрах.
  • Улучшена производительность повторения строк.
  • Другие незначительные изменения.

Также улучшены документация и тестирование; исправлены ошибки сборки.

>>> Подробности на GitHub

★★★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 1)

встроенного сверхвысокоуровневого функционального языка программирования

Так, это, короче;
    Сам знаешь:
        Метнулся туда-сюда;
        Сделал то да сё;
    И чтоб было всё к утру;
Что смотришь, работай давай.
Smacker ★★★★★
()

Пользуюсь сабжем регулярно, раз в месяц, для форматирования JSON-файлов, выгруженных из андроид-программы «Проверка чеков» от ФНС. Отличная подборка расходов для домашней бухгалтерии (хотя если всё это потом грузить в одну БД, форматированный вид нужен не особо – но для визуального контроля, то ли у меня выгружено, самое оно).

Сверхвысокоуровневым функциональным языком программирования не пользуюсь, мне вполне достаточно расстановки отступов jq по умочанию. Так что я, наверное, забиваю гвозди микроскопом, но этот микроскоп от такого не ломается. :)

hobbit ★★★★★
()

пользую сабж для более лучшей читабельности json'ов в выхлопе трафика fediverse при отладке. полезная утилька.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Smacker

Извиняемся, хозяйка,
Энто дело не про нас!
Кабы схемку аль чертеж —
Мы б затеяли вертеж,
Ну а так — ищи сколь хочешь,
Черта лысого найдешь!
Где искать и как добыть
То-Чаво-Не-Может-Быть?
Ведь его ж на свете нету,
Сколько землю не копыть!..

hobbit ★★★★★
()

При сборке с meson использую, когда надо что-то вытащить из интроспекции. Да и вообще для автоматизации утилитка крайне полезная.

SkyMaverick ★★★★★
()
Ответ на: комментарий от hobbit

Сразу видно — человек высокой культуры!

Smacker ★★★★★
()

Там код не очень интересен, так как используется яша (yacc) для лексического анализа (файл parser.y), который не сильно делает понятнее его марсианский синтаксис, который быстро забывается. Слава дикпику, что он умеет генерировать запросы на jq. А сама утилита хоть и написана на c, но для огромных файлов непригодна, поэтому надо греппать, а потом уже jq вызывать

rtxtxtrx ★★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)

Одна из самых незаменимых утилит в арсенале. Постоянно использую для отладки и для тестов.

Chiffchaff
()
Ответ на: комментарий от rtxtxtrx

а что там с большими файлами? я не пробовала ему скармливать что-то сильно жирное, у меня нет таких json'ов.

Iron_Bug ★★★★★
()

Утилита осталась невостребованной, удалил.

dmitry237 ★★★★★
()

На работе есть один продукт, там JQ используется в качестве языка конфигурирования потока данных (настраивается граф загрузок различных REST систем, и на JQ пишутся трансформации).

Наши пользователи (не программисты) пишут такие мозголомные JQ в своих конфигурациях, что ревьюить и разбираться в этом просто больно. Синтаксис по когнитивной сложности дотягивает спокойно до уровня регексов (если иметь дело с сложным JSON, а не просто с объектом с парой простых полей).

Fizzika ★★
()

В пайплайнах регулярно пользуюсь, правда минимальным функционалом - получить определённый параметр из полученного json’а. Надо будет проверить, не прибита ли гвоздями версия и обновиться.

Irben ★★★
()

Буквально третьего дня узнал, что у Bing Wallpapers есть удобный JSON, откуда можно выдрать 6 последних обоин. И моментально написал однострочник для Hyprland!

Без jq пришлось бы корячиться с Пайтоном.

somemong
()
Ответ на: комментарий от hobbit

Так что я, наверное, забиваю гвозди микроскопом, но этот микроскоп от такого не ломается

Не умеете ломать микроскопы, а признать это духа не хватает?.. ;P ;))

Somebody ★★★
()

Ужасный язык. Работу свою делает, но лучше бы придумали что-то другое.

vbr ★★★★★
()

фурькину favicons.sqlite норм расчленит?

piyavking ★★★★★
()
Последнее исправление: piyavking (всего исправлений: 1)

Для регулярных выражений опционально может использоваться библиотека Oniguruma.

Оно же сдохло, не?

CYB3R ★★★★★
()
Ответ на: комментарий от Somebody

Если вдруг кому-то понадобится.

Кому-то из них? :)

$ apt rdepends libonig5

libonig5
Reverse Depends:
  Depends: libonig-dev (= 6.9.9-1+b1)
  Depends: sylpheed (>= 6.8.1)
  Depends: php8.4-mbstring (>= 6.8.1)
  Depends: lua-rex-onig (>= 6.8.1)
  Depends: libsylph1t64 (>= 6.9.6)
  Depends: libslang2-modules (>= 6.8.1)
  Depends: libevhtp0t64 (>= 6.9.6)
  Depends: libjq1 (>= 6.8.1)
  Depends: bfs (>= 6.8.1) # я когда-то уговорил автора использовать Oniguruma. Ой, что же теперь будет? :)
dataman ★★★★★
() автор топика
Ответ на: комментарий от rtxtxtrx

Слава дикпику

Была уже шутка достойная башорга про это, но на ЛОРе не надо дикпиком что-то генерировать, лучше используйте дипсик.

ei-grad ★★★★★
()

Использую для разбора вывода storcli в скриптах, дюже полезно.

WatchCat ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.