Написать пост

Как обрабатывать JSON в командной строке

Аватар Типичный программист

Какой-нибудь инструмент для работы с json в командной строке был бы удобен при отладке REST API. Можно делать запрос, получать ответ и сразу же разбирать его, выделяя нужные объекты и поля.

Рассмотрим утилиту для работы с json из командной строки под названием jq, которая делает именно то, что нам нужно. С её помощью можно разбирать, фильтровать, сопоставлять и преобразовывать json-данные без лишних усилий.

Для установки на Linux можно просто скачать бинарники (есть 32 и 64 битные версии):

			$ wget http://stedolan.github.io/jq/download/linux32/jq (32-bit)
$ wget http://stedolan.github.io/jq/download/linux64/jq (64-bit)
$ chmod +x ./jq
$ sudo cp jq /usr/bin
		

Есть также сборки и для Windows и Mac OS X. Полный исходный код распространяется по лицензии MIT.

Рассмотрим примеры. Допустим, у нас есть следующая json-схема.

			$ cat json.txt
{
        "name": "Google",
        "location":
                {
                        "street": "1600 Amphitheatre Parkway",
                        "city": "Mountain View",
                        "state": "California",
                        "country": "US"
                },
        "employees":
                [
                        {
                                "name": "Michael",
                                "division": "Engineering"
                        },
                        {
                                "name": "Laura",
                                "division": "HR"
                        },
                        {
                                "name": "Elise",
                                "division": "Marketing"
                        }
                ]
}
		

Получим простое поле:

			$ cat json.txt | jq '.name'
"Google"
		

Теперь чуть сложнее, со вложенностью:

			$ cat json.txt | jq '.location.city'
"Mountain View"
		

Для массивов:

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

Выборка конкретного списка полей:

			$ cat json.txt | jq '.location | {street, city}'
{
  "city": "Mountain View",
  "street": "1600 Amphitheatre Parkway"
}
		

Перевод статьи “How to parse JSON string via command line on Linux”

Следите за новыми постами
Следите за новыми постами по любимым темам
33К открытий33К показов