jq 1.7

good-penguin.png

7 сентября, после пятилетнего застоя, состоялся выпуск 1.7 библиотеки и консольной утилиты jq, предназначенной для работы с форматом JSON и написанной на языке программирования C. Опционально, утилита может быть скомпилирована с использованием библиотеки регулярных выражений Oniguruma.

Изменения:

  • новый адрес: https://github.com/jqlang;
  • новые сопровождающие, администраторы и владельцы;
  • файл NEWS заменен на NEWS.md;
  • улучшения CI, документации, тестирования и веб-сайта;
  • образы Docker теперь доступны с https://ghcr.io/jqlang/jq вместо Docker Hub;

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

  • цвет ключа объекта можно настраивать с помощью переменной окружения JQ_COLORS;
  • цвет null теперь ярко-черный по-умолчанию;
  • для отключения цвета можно использовать переменную окружения NO_COLOR;
  • улучшен вывод с ключом --help. Теперь указываются все опции и в более удобном порядке;
  • добавлен ключ --raw-output0 для вывода данных с нулевым байтом в качестве разделителя;
  • удалён ключ --argfile.
  • другие изменения.

Изменения языка запросов:

  • для сохранения точности нужно использовать десятичные литералы чисел. Операции сравнения сохраняют точность, но арифметические операции могут усекаться;
  • добавлена функция pick(stream) для выдачи проекции входного объекта или массива:
$ jq -n '{"a": 1, "b": {"c": 2, "d": 3}, "e": 4} | pick(.a, .b.c, .x)'
{
  "a": 1,
  "b": {
    "c": 2
  },
  "x": null
}
  • добавлена функция debug(msgs), которая работает как debug, но применяет фильтр к входным данным перед записью в stderr:
$ jq -n '1 as $x | 2 | debug("Entering function foo with $x == \($x)", .) | (.+1)'
["DEBUG:","Entering function foo with $x == 1"]
["DEBUG:",2]
3
$ jq -n '{a: 1, b: 2, c: 3} | debug({a, b, sum: (.a+.b)})'
["DEBUG:",{"a":1,"b":2,"sum":3}]
{
  "a": 1,
  "b": 2,
  "c": 3
}
  • добавлена функция scan($re; $flags):
# look for pattern "ab" in "abAB" ignoring casing
$ jq -n '"abAB" | scan("ab"; "i")'
"ab"
"AB"
  • добавлена функция abs для получения абсолютного значения числа;
  • if можно использовать без else:
# convert 1 to "one" otherwise keep as is
$ jq -n '1,2 | if . == 1 then "one" end'
"one"
2
# behaves the same as
$ jq -n '1,2 | if . == 1 then "one" else . end'
"one"
2
# also works with elif
$ jq -n '1,2,3 | if . == 1 then "one" elif . == 2 then "two" end
"one"
"two"
3
  • можно использовать $переменная в качестве ключа в объектных литералах:
$ jq -n '"a" as $key | {$key: 123}'
{
  "a": 123
}
# previously parentheses were needed
$ jq -n '"a" as $key | {($key): 123}'
{
  "a": 123
}
  • можно использовать точку между индексами в цепочке при использовании .["index"]:
$ jq -n '{"a": {"b": 123}} | .a["b"]'
123
# now this also works
$ jq -n '{"a": {"b": 123}} | .a.["b"]'
123
  • можно использовать точку для итератора цепочек значений .[] и .[]?:
$ jq -n '{"a": [123]} | .a[]'
123
# now this also works
$ jq -n '{"a": [123]} | .a.[]'
123
  • ускорение и рефакторинг некоторых встроенных функций;
  • множественные исправления ошибок и другие изменения.

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

©  Linux.org.ru