Как распарсить JSON-строку в командной строке Linux +15



Если вы часто работаете с текстами формата JSON из командной строки или в шелл-скриптах, вы можете задаться вопросом, есть ли какая-то консольная утилита, которая может распарсить JSON-строку. Консольный JSON-парсер может быть удобен, когда вы тестируете или отлаживаете сетевые JSON-сервисы. Вы можете скормить ответы формата JSON от веб-сервиса консольному JSON-парсеру, тем самым легко изучая трудночитаемые JSON-ответы или извлекая из них отдельные объекты.

В этом руководстве я покажу, как распарсить JSON-строку из командной строки.

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

Установите jq из репозитория вашего дистрибутива Linux.

Для Debian и Ubuntu:

$ sudo apt-get install jq

Для Fedora:

$ sudo dnf install jq

Для openSUSE:

$ sudo zypper install jq

Также вы можете установить jq, просто скачав его бинарник (доступен отдельно для 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.

Следующие примеры показывают, как парсить JSON-структуру данных с помощью jq.

Пример 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"
                        }
                ]
}

Чтобы распарсить 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}'

{
  "city": "Mountain View",
  "street": "1600 Amphitheatre Parkway"
}
-->


К сожалению, не доступен сервер mySQL