LINUX.ORG.RU

jq 1.7

 , , ,

jq 1.7

2

2

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
  • ускорение и рефакторинг некоторых встроенных функций;
  • множественные исправления ошибок и другие изменения.

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

★★★★★

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

образы Docker теперь доступны с https://ghcr.io/jqlang/jq вместо Docker Hub;

jq - штука полезная, для отладки всяких rest с json выхлопом.Но нафига ее в docker пихать? Какой тут сакральный смысл?

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

Смысл именно сакральный - удовлетворить докерфагов.

Дык эта… jq - это не сферический конь в вакууме. Не знаю как другие, а я в bash-скриптах использую её, аналогом продвинутого grep для json. И вот, получив это чудо в контейнере, куда мне с ним идти и что делать?

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

Никуда не идти. Я ж говорю - это чтоб угодить докерфагам. Они не используют софт по назначению, они только радуются когда видят что-то в докере.

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

А что есть вариант лучше? Только сейчас docker стал просто контейнером, так как ПО от docker можно не использовать.

Еще набирает обороты wasm, видимо он будет следующим

kogeletey
()
Ответ на: комментарий от intelfx

Ой ну ладно тебе. Его ниша в инфре. Дальше ему вряд ли выйти.

PS паковать jq в докер, это прям дно какое-то))). Давайте тогда уж и awk c grep’ом тоже в контейнеры засунем 😄.

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

и awk c grep’ом тоже в контейнеры засунем

И про true c false не забыть!

dataman ★★★★★
() автор топика
Ответ на: комментарий от ergo

паковать jq в докер, это прям дно какое-то

Я и не говорил, что мне это нравится.

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

И всеравно не понимаю зачем. В моем понимании jq - это такой инструмент отладки чтобы через пайп передать выхлоп, отпарсить и красиво отобразить. А как к нему обращаться внутри docker и (тем более) k8s вообще ума не приложу, усложнения ради усложнений.

firkax intelfx

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

Ну может кто-то хочет украшать и данные по ключам извлекать в промышленных масштабах!

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

Внутри k8s он не нужен. А докер некоторые люди используют вместо Nix, когда нет Nix вместо пакетного менеджера, т. е. тупо вместо того, чтобы сделать apt install jq, пишут docker run --pipe jq и всё.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.