← Linux: администрирование
10 мин · просто · Урок 7 из 10

JSON и jq

Как разбирать JSON в шелле: jq для фильтрации полей, массивов и вывода API без копания глазами.

Почему JSON неудобно грепать

API облаков, kubectl, docker inspect, конфиги — всё отдаёт JSON. Это вложенная структура, и grep/awk по ней работают плохо: они построчные, а JSON — дерево. Нужен инструмент, который понимает структуру. Это jq.

jq берёт JSON на вход, применяет выражение и отдаёт результат. Работает в пайпе, как обычная shell-команда.

Достать поле

$ echo '{"name":"web","port":8080}' | jq '.name'
"web"

$ echo '{"name":"web","port":8080}' | jq '.port'
8080

.поле достаёт значение по ключу. Вложенные поля задаются через точку: .server.host. Чтобы убрать кавычки у строки, есть флаг -r (raw):

$ echo '{"name":"web"}' | jq -r '.name'
web

-r нужен, когда значение идёт в другую команду или переменную: кавычки там мешают.

Массивы

$ echo '[{"name":"web"},{"name":"db"}]' | jq '.[].name'
"web"
"db"

.[] разворачивает массив в поток элементов, дальше .name берёт поле у каждого. Достать один элемент по индексу: .[0]. Длину массива даёт length.

Фильтр и формат

jq умеет доставать, фильтровать и переформатировать:

# только запущенные контейнеры, вывести имя и образ
docker inspect $(docker ps -q) \
  | jq -r '.[] | select(.State.Running) | "\(.Name) \(.Config.Image)"'

Где это в работе

jq — стандартный спутник любого CLI, который отдаёт JSON:

kubectl get pods -o json | jq -r '.items[].metadata.name'
curl -s https://api.example.com/users | jq '.[].email'
aws ec2 describe-instances | jq -r '.Reservations[].Instances[].InstanceId'

Без jq это превращается в борьбу с регэкспами. С jq это короткое выражение по структуре.

Что важно запомнить

jq разбирает JSON по структуре, а не построчно: .поле достаёт значение, .[] разворачивает массив, select() фильтрует.

-r убирает кавычки у строк. Нужен, когда значение идёт в другую команду или переменную.

jq — спутник любого CLI с JSON-выводом (kubectl -o json, docker inspect, ответы API); он заменяет борьбу с регэкспами коротким выражением.

В следующих треках jq встретится при работе с Kubernetes и облачными API.

Прошли материал до конца? Отметьте урок пройденным.