Як розпарсити json-рядок в командної рядку linux

Як розпарсити json-рядок в командної рядку linux

Якщо ви часто працюєте з текстами формату JSON з командного рядка або в шелл-скриптах, ви можете задатися питанням, чи є якась консольна утиліта, яка може розпарсити JSON-рядок. Консольний JSON-парсер може бути зручний, коли ви тестируете або налагоджувати мережеві JSON-сервіси. Ви можете згодувати відповіді формату JSON від веб-сервісу консольного JSON-парсеру, тим самим легко вивчаючи мають важко JSON-відповіді або витягуючи з них окремі об'єкти.

У цьому керівництві я покажу, як розпарсити JSON-рядок з командного рядка.

У Linux є консольний JSON-процесор jq. який робить те, що нам необхідно. Використовуючи jq, ви можете парсити, фільтрувати, мапіть і перетворювати JSON-структуру даних без особливих зусиль.

Встановіть jq зі сховищ вашого дистрибутива Linux.

Для Debian і Ubuntu:


Також ви можете встановити jq, просто скачавши його бінарник (доступний окремо для 32- і 64-бітної систем), як показано далі.


Бінарник jq також доступний для Windows, OS X і Solaris платформ, а його повний вихідний код випущений під ліцензією MIT.

Наступні приклади показують, як парсити JSON-структуру даних за допомогою jq.

Щоб розпарсити JSON-об'єкт:

Щоб розпарсити вкладений JSON-об'єкт:

Щоб розпарсити JSON-масив:

Щоб витягти конкретні поля з JSON-об'єкта:

Якщо JSON великий і структура його не ясна (приклад: відповідь AWS API) можна використовувати github.com/ilyash/show-struct (моя розробка), який покаже структуру у вигляді можливих аргументів (paths) для JQ.

Більш радикальне рішення для роботи з структурованими даними в короби: ... Шелл який підтримує структуровані дані і в якому не потрібен JQ. Я працюю над цим: github.com/ilyash/ngs. Приклад: instances = `` aws ec2 describe-instances $ * filters``