Команда jq в Linux
Полный справочник команд Linux
jq — это легкий и мощный процессор JSON командной строки. Он позволяет эффективно разбирать, фильтровать, преобразовывать и форматировать данные JSON, и особенно подходит для обработки данных JSON в сценариях оболочки.
Основные возможности jq
- Потоковая обработка: может обрабатывать данные JSON любого размера
- Богатый набор операторов: предоставляет множество операторов для работы со структурами данных JSON
- Форматированный вывод: может красиво форматировать вывод JSON для лучшей читаемости
- Кроссплатформенность: работает в Linux, macOS и Windows (через WSL)
Установка jq
В большинстве дистрибутивов Linux вы можете легко установить jq через менеджер пакетов:
Примеры
sudo apt-get install jq
# CentOS/RHEL
sudo yum install jq
# Fedora
sudo dnf install jq
# macOS (с использованием Homebrew)
brew install jq
После установки можно проверить, успешно ли прошла установка, с помощью следующей команды:
jq --version
Базовый синтаксис
Базовый формат команды jq выглядит следующим образом:
jq [options] [file...]
Общие параметры и
| Опция | Описание |
|---|---|
-c |
Компактный вывод (без форматирования) |
-r |
Вывод необработанной строки (удаление кавычек JSON) |
-s |
Считать весь входной поток в массив |
-M |
Отключить цветной вывод |
--arg |
Определить переменную |
--slurp |
Считать несколько объектов JSON в массив |
Примеры типовых операций
1. Базовый разбор JSON
Предположим, у нас есть файл с именемdata.jsonсо следующим содержимым:
Пример
"name": "John Doe",
"age": 30,
"isActive": true,
"address": {
"street": "123 Main St",
"city": "New York"
},
"hobbies": ["reading", "hiking", "coding"]
}
Получить всё содержимое (форматированный вывод):
jq '.' data.json
Получить конкретное поле:
Пример
# Вывод: "John Doe"
Получить вложенное поле:
Пример
# Вывод: "New York"
2. Операции с массивами
Получение элементов массива:
Пример
# Вывод: "reading"
jq '.hobbies[1:3]' data.json
# Вывод: ["hiking", "coding"]
Длина массива:
Пример
# Вывод: 3
3. Условная фильтрация
Фильтровать элементы, удовлетворяющие условию:
Пример
jq '.[] | select(.age > 25)' users.json
4. Преобразование данных
Создать новый объект:
Пример
# Вывод: {"fullName": "John Doe", "city": "New York"}
Математические операции:
Пример
# Вывод: 60
5. Обработка нескольких файлов
jq -s '.[0] + .[1]' file1.json file2.json
Продвинутое использование
1. Использование переменных
jq --arg new_city "Boston" '.address.city = $new_city' data.json
2. Обработка ответов API
curl -s https://api.example.com/users | jq '.[] | {name: .name, email: .email}'
3. Сложное преобразование данных
Пример
jq -r '["Name", "Age"], (.[] | [.name, .age]) | @csv' users.json
4. Обработка ошибок
Пример
jq 'try .unknown_field catch "default value"' data.json
Сценарии реального применения
1. Анализ логов
Пример
cat app.log | jq 'select(.level == "error") | {time: .timestamp, message: .msg}'
2. Обработка конфигурации
Пример
jq '.config.timeout = 30' config.json > temp.json && mv temp.json config.json
3. Статистика данных
Пример
jq '[.[].age] | add / length' users.json
ЧАВО
1. Как обрабатывать большие JSON-файлы?
Для очень больших JSON-файлов можно использовать потоковую обработку:
jq -n 'inputs | select(.value > 100)' hugefile.json
2. Как сохранить специальные символы в JSON?
При использовании-rопция, специальные символы экранируются. Если вам нужно вывести их как есть, можно:
jq -j '.' file.json
3. Как объединить несколько JSON-файлов?
jq -s 'add' file1.json file2.json
Итог
jq — мощный инструмент для обработки данных JSON. Из этой статьи вы должны были усвоить:
- Базовая установка и использование jq
- Общие операции запроса и фильтрации данных
- Продвинутые методы преобразования и обработки данных
- Способы использования в реальных сценариях применения
Чтобы ещё больше улучшить ваши навыки работы с jq, вы можете:
- Практикуйтесь в обработке различных сложных структур данных JSON
- Попробуйте интегрировать jq в ваши shell-скрипты
- Обратитесь к официальному руководству jq, чтобы изучить более продвинутые функции
Помните, что освоение jq может значительно повысить вашу эффективность при обработке данных JSON в командной строке!
Другие расширения