jq - это легковесный и гибкий инструмент командной строки для обработки и анализа JSON. Если вам нужно вытаскивать данные, фильтровать или преобразовывать JSON-файлы, jq станет незаменимым помощником. Давайте рассмотрим базовые и продвинутые примеры его использования.
1. Чтение и форматирование JSON. Вывести JSON с красивым форматированием:
echo '{"name": "Alice", "age": 30, "city": "Paris"}' | jq .
. - это самый простой фильтр, который просто выводит входной JSON.
2. Извлечение конкретного значения. Извлечь значение поля name:
echo '{"name": "Alice", "age": 30}' | jq '.name'
Вывод:
"Alice"
3. Фильтрация массива. Вывести имена из массива объектов:
echo '[{"name": "Alice"}, {"name": "Bob"}]' | jq '.[].name'
Вывод:
"Alice"
"Bob"
Продвинутые примеры
1. Условная фильтрация. Отфильтруем объекты, где age больше 25:
echo '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 20}]' | jq '.[] | select(.age > 25)'
Результат:
{"name": "Alice", "age": 30}
2. Преобразование структуры данных. Изменим структуру JSON, преобразовав ключи в массив:
echo '{"name": "Alice", "age": 30}' | jq 'to_entries | map({(.key): .value})'
Результат:
[{"name":"Alice"}, {"age":30}]
3. Группировка данных. Группировка массива по определённому полю:
echo '[{"name": "Alice", "group": "admin"}, {"name": "Bob", "group": "user"}, {"name": "Charlie", "group": "admin"}]' | jq 'group_by(.group) | map({group: .[0].group, members: .})'
Результат:
[{"group":"admin","members":[{"name":"Alice","group":"admin"},{"name":"Charlie","group":"admin"}]}, {"group":"user","members":[{"name":"Bob","group":"user"}]}]
Объединение данных
1. Объединение JSON из двух файлов. Объединим данные из file1.json и file2.json:
jq -s '.[0] * .[1]' file1.json file2.json
-s читает все входные файлы в массив.
* объединяет два JSON-объекта.
👍 Полезные советы
Используйте jq с curl для обработки данных из API:
curl -s https://api.example.com/data | jq '.items[] | {name: .name, id: .id}'
Фильтруйте сложные JSON-файлы:
jq '.store.book[] | select(.price < 10)' books.json
Это выведет все книги с ценой меньше 10.
---
jq - это универсальный инструмент для работы с JSON, который позволяет не только извлекать данные, но и модифицировать их по сложным правилам. С помощью jq можно существенно сократить время на обработку данных и автоматизировать задачи, которые раньше занимали часы.
BashTex 📱 #linux #utils