Команда jq в Linux

Linux 命令大全Полный справочник команд Linux


jq — это легкий и мощный процессор JSON командной строки. Он позволяет эффективно разбирать, фильтровать, преобразовывать и форматировать данные JSON, и особенно подходит для обработки данных JSON в сценариях оболочки.

Основные возможности jq

  • Потоковая обработка: может обрабатывать данные JSON любого размера
  • Богатый набор операторов: предоставляет множество операторов для работы со структурами данных JSON
  • Форматированный вывод: может красиво форматировать вывод JSON для лучшей читаемости
  • Кроссплатформенность: работает в Linux, macOS и Windows (через WSL)

Установка jq

В большинстве дистрибутивов Linux вы можете легко установить jq через менеджер пакетов:

Примеры

# Ubuntu/Debian
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

Получить конкретное поле:

Пример

jq '.name' data.json
# Вывод: "John Doe"

Получить вложенное поле:

Пример

jq '.address.city' data.json
# Вывод: "New York"

2. Операции с массивами

Получение элементов массива:

Пример

jq '.hobbies[0]' data.json
# Вывод: "reading"

jq '.hobbies[1:3]' data.json
# Вывод: ["hiking", "coding"]

Длина массива:

Пример

jq '.hobbies | length' data.json
# Вывод: 3

3. Условная фильтрация

Фильтровать элементы, удовлетворяющие условию:

Пример

# Предположим, users.json содержит массив пользователей
jq '.[] | select(.age > 25)' users.json

4. Преобразование данных

Создать новый объект:

Пример

jq '{fullName: .name, city: .address.city}' data.json
# Вывод: {"fullName": "John Doe", "city": "New York"}

Математические операции:

Пример

jq '.age * 2' data.json
# Вывод: 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. Сложное преобразование данных

Пример

# Преобразовать массив объектов в формат CSV
jq -r '["Name", "Age"], (.[] | [.name, .age]) | @csv' users.json

4. Обработка ошибок

Пример

# Использовать try-catch для обработки полей, которые могут не существовать
jq 'try .unknown_field catch "default value"' data.json

Сценарии реального применения

1. Анализ логов

Пример

# Анализировать лог-файлы в формате JSON
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. Из этой статьи вы должны были усвоить:

  1. Базовая установка и использование jq
  2. Общие операции запроса и фильтрации данных
  3. Продвинутые методы преобразования и обработки данных
  4. Способы использования в реальных сценариях применения

Чтобы ещё больше улучшить ваши навыки работы с jq, вы можете:

  • Практикуйтесь в обработке различных сложных структур данных JSON
  • Попробуйте интегрировать jq в ваши shell-скрипты
  • Обратитесь к официальному руководству jq, чтобы изучить более продвинутые функции

Помните, что освоение jq может значительно повысить вашу эффективность при обработке данных JSON в командной строке!


Linux 命令大全Полный справочник команд Linux

Другие расширения