Какой-нибудь инструмент для работы с 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»