JQ — Commands

If you like this project, consider supporting me on Buy Me a Coffee ☕️

📖 Basics / Основы

jq '.' file.json                               # Pretty-print JSON / Красивый вывод JSON
jq '.' < file.json                             # Read from stdin / Читать из stdin
echo '{"key":"value"}' | jq '.'                # Pipe JSON / JSON через pipe
jq '.key' file.json                            # Extract single key / Извлечь один ключ
jq '.user.name' file.json                      # Nested key / Вложенный ключ
jq '.items[0]' file.json                       # First array element / Первый элемент массива
jq '.items[-1]' file.json                      # Last array element / Последний элемент
jq '.items[2:5]' file.json                     # Array slice / Срез массива

🔍 Selecting & Filtering / Выбор и фильтрация

jq '.items[]' file.json                        # Iterate array elements / Перебрать элементы
jq '.items[] | .name' file.json                # Extract field from each / Извлечь поле из каждого
jq -r '.items[].name' file.json                # Raw output (no quotes) / Сырой вывод (без кавычек)
jq '.items[] | select(.active)' file.json      # Filter by boolean / Фильтр по булеву значению
jq '.items[] | select(.price > 100)' file.json # Filter by value / Фильтр по значению
jq '.items[] | select(.name == "Alice")' file.json  # Exact match / Точное совпадение
jq '.items[] | select(.name | contains("test"))' file.json  # Contains filter / Фильтр по вхождению
jq '.items[] | select(.tags | contains(["prod"]))' file.json  # Array contains / Массив содержит
jq '.items[] | select(.status != "deleted")' file.json  # Not equal / Не равно

🔄 Transforming Data / Преобразование данных

jq '.items[] | {id, email}' file.json          # Pick specific fields / Выбрать конкретные поля
jq '.items[] | {name: .user, value: .price}' file.json  # Rename fields / Переименовать поля
jq '.items | map(.name)' file.json             # Map array / Преобразовать массив
jq '.items | map({name, price})' file.json     # Map to objects / Преобразовать в объекты
jq '.user | {name, age: (.age | tostring)}' file.json  # Type conversion / Преобразование типов
jq '(.items[] | select(.id == 42)).name = "Alice"' file.json  # Update field / Обновить поле
jq '.items[] | .price *= 1.1' file.json        # Modify values / Изменить значения
jq 'del(.password)' file.json                  # Delete field / Удалить поле
jq '.items[] | if .active then .status = "live" else .status = "paused" end' file.json  # Conditional / Условие

📊 Arrays & Objects / Массивы и объекты

jq '.items | length' file.json                 # Array length / Длина массива
jq '.items | add' file.json                    # Sum array elements / Сумма элементов
jq '.items | unique' file.json                 # Remove duplicates / Удалить дубликаты
jq '.items | sort_by(.price)' file.json        # Sort by field / Сортировать по полю
jq '.items | reverse' file.json                # Reverse array / Обратный порядок
jq '.items | group_by(.category)' file.json    # Group by field / Группировать по полю
jq '.items | flatten' file.json                # Flatten nested arrays / Развернуть вложенные массивы
jq '.items | first' file.json                  # First element / Первый элемент
jq '.items | last' file.json                   # Last element / Последний элемент
jq '{name, age} + {email}' file.json           # Merge objects / Объединить объекты
jq '.items | keys' file.json                   # Object keys / Ключи объекта
jq '.items | values' file.json                 # Object values / Значения объекта

🧮 Aggregation & Math / Агрегация и математика

jq '[.items[].price] | add' file.json          # Sum prices / Сумма цен
jq '[.items[].price] | add / length' file.json # Average / Среднее значение
jq '[.items[].price] | max' file.json          # Maximum value / Максимальное значение
jq '[.items[].price] | min' file.json          # Minimum value / Минимальное значение
jq '.items | map(.price) | add' file.json      # Map and sum / Преобразовать и сложить
jq 'group_by(.status) | map({status: .[0].status, count: length})' file.json  # Group & count / Группировка и подсчёт
jq '.items | map(select(.active)) | length' file.json  # Count filtered / Подсчитать отфильтрованные
jq '.items[] | .total = (.price * .quantity)' file.json  # Calculate field / Вычислить поле

🔬 Advanced Queries / Продвинутые запросы

jq '.items[] | select(.tags[] | contains("prod"))' file.json  # Filter nested arrays / Фильтр вложенных массивов
jq '.items | map(select(.price > 100)) | sort_by(.price) | .[0:5]' file.json  # Complex pipeline / Сложный конвейер
jq '.items | unique_by(.category)' file.json   # Unique by field / Уникальные по полю
jq '.items[] | select(.created | fromdateiso8601 > now - 86400)' file.json  # Date filter / Фильтр по дате
jq '.items | INDEX(.id)' file.json             # Convert to object by ID / Конвертировать в объект по ID
jq '.items[] | .tags | @csv' file.json         # Convert to CSV / Конвертировать в CSV
jq 'reduce .items[] as $item (0; . + $item.price)' file.json  # Reduce operation / Операция reduce
jq '.items[] | select(.tags | any(. == "prod"))' file.json  # Any match / Любое совпадение
jq '.items[] | select(.tags | all(. != "test"))' file.json  # All match / Все совпадают
jq 'paths(type == "number")' file.json         # Find all number paths / Найти все пути к числам

📤 Output Formatting / Форматирование вывода

jq -r '.items[] | "\(.name): \(.price)"' file.json  # Custom string format / Произвольный формат строки
jq -r '.items[] | @csv' file.json              # CSV output / Вывод CSV
jq -r '.items[] | @tsv' file.json              # TSV output / Вывод TSV
jq -r '.items[] | @json' file.json             # JSON output / Вывод JSON
jq -r '.items[] | @base64' file.json           # Base64 encoding / Кодирование Base64
jq -r '.items[] | @uri' file.json              # URL encoding / URL кодирование
jq -c '.items[]' file.json                     # Compact output (no newlines) / Компактный вывод
jq -S '.' file.json                            # Sort keys / Сортировать ключи
jq --tab '.' file.json                         # Tab indentation / Отступы табуляцией
jq -r '.items[] | [.id, .name, .price] | @tsv' file.json  # Array to TSV / Массив в TSV

🌟 Real-World Examples / Примеры из практики

curl -s https://api.example.com/users | jq '.[] | {id, email}'  # API response filter / Фильтр API ответа
kubectl get pods -o json | jq '.items[] | {name: .metadata.name, status: .status.phase}'  # Kubernetes pods / Kubernetes поды
jq -r '.users[] | select(.active) | "\(.id),\(.email)"' users.json > active.csv  # Export to CSV / Экспорт в CSV
docker inspect <CONTAINER> | jq '.[0].NetworkSettings.IPAddress'  # Docker IP / IP контейнера Docker
curl -s https://api.github.com/repos/<USER>/<REPO>/releases/latest | jq -r '.tag_name'  # GitHub latest release / Последний релиз GitHub
jq -s '.[0] * .[1]' file1.json file2.json      # Merge two JSON files / Объединить два JSON файла
jq -r '.items[] | select(.price > 100) | @csv' products.json  # Filter and export / Фильтр и экспорт
cat access.log | jq -s 'group_by(.status) | map({status: .[0].status, count: length})'  # Log analysis / Анализ логов
jq '.services[] | select(.health == "unhealthy") | .name' status.json  # Find unhealthy services / Найти нездоровые сервисы
echo '{"users": [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]}' | jq '.users | sort_by(.age) | .[0].name'  # Youngest user / Самый молодой пользователь

💡 Advanced Techniques / Продвинутые техники

jq -n --arg name "Alice" --arg email "[email protected]" '{name: $name, email: $email}'  # Build JSON from args / Создать JSON из аргументов
jq -n --argjson data '{"key":"value"}' '$data'  # Pass JSON as argument / Передать JSON как аргумент
jq --slurpfile data other.json '{main: ., imported: $data}' file.json  # Import external JSON / Импортировать внешний JSON
jq -r 'to_entries | .[] | "\(.key)=\(.value)"' config.json  # Convert to key=value / Конвертировать в key=value
jq 'walk(if type == "string" then gsub("<IP>"; "<NEW_IP>") else . end)' file.json  # Replace all strings / Заменить все строки
jq 'limit(5; .items[])' file.json              # Limit output / Ограничить вывод
jq -e '.status == "success"' file.json         # Exit code based on condition / Код выхода по условию
jq '.. | numbers'                              # All numbers in JSON / Все числа в JSON
jq '.. | strings | select(startswith("http"))' file.json  # Find all URLs / Найти все URL
jq -c '.[]' file.json | parallel -j 4 'process {}'  # Parallel processing / Параллельная обработка

🔧 Troubleshooting / Устранение неполадок

jq --version                                   # Check version / Проверить версию
jq -e '.' file.json; echo $?                   # Validate JSON syntax / Проверить синтаксис JSON
jq 'type' file.json                            # Check data type / Проверить тип данных
jq 'keys' file.json                            # List all keys / Список всех ключей
jq 'paths' file.json                           # Show all paths / Показать все пути

On this page

📖 Basics / Основы 🔍 Selecting &amp; Filtering / Выбор и фильтрация 🔄 Transforming Data / Преобразование данных 📊 Arrays &amp; Objects / Массивы и объекты 🧮 Aggregation &amp; Math / Агрегация и математика 🔬 Advanced Queries / Продвинутые запросы 📤 Output Formatting / Форматирование вывода 🌟 Real-World Examples / Примеры из практики 💡 Advanced Techniques / Продвинутые техники 🔧 Troubleshooting / Устранение неполадок