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


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

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

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

Для установки jq на Linux, просто скачайте його бінарники (доступний окремо для 32 — і 64-бітових систем) як показано далі.

$ wget http://stedolan.github.io/jq/download/linux32/jq # (32-бітна система)
$ wget http://stedolan.github.io/jq/download/linux64/jq # (64-бітна система)
$ chmod +x ./jq
$ sudo mv jq /usr/local/bin

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

Також ви можете встановити jq з репозиторію вашого дистрибутива Linux.

Для Debian і Ubuntu:

$ sudo apt-get install jq

Для Fedora:

$ sudo dnf install jq

Для openSUSE:

$ sudo zypper install jq

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

Приклад JSON-схеми:

$ cat json.txt

{
"name": "Google",
"location":
{
"street": "1600 Amphitheatre Parkway",
"центр": "Mountain View",
"state": "California",
"country": "US"
},
"employees":
[
{
"name": "Michael",
"division": "Engineering"
},
{
"name": "Laura",
"division": "HR"
},
{
"name": "Elise",
"division": "Marketing"
}
]
}

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

$ cat json.txt | jq '.name'

"Google"

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

$ cat json.txt | jq '.location.city'

"Mountain View"

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

$ cat json.txt | jq '.employees[0].name'

"Michael"

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

$ cat json.txt | jq '.location | {street, city}'

{
"центр": "Mountain View",
"street": "1600 Amphitheatre Parkway"
}

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.