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

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

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

Для установки на Linix можно просто скачать бинарники (есть 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”