В этой статье я покажу как можно распарсить JSON вывод с помощью простых команд Linux. Т.е. без применения языков программирования.
В Linux есть утилита jq, которая умеет парсить JSON формат. С её помощью можно парсить, фильтровать, сопоставлять и преобразовывать json-данные без усилий.
Установка в Debian:
$sudo apt-get install jq
Всё, установили. Начинаем парсить JSON.
Допустим у нас есть такой документ:
{ "cgi_json_version": "1.9.0",
"icinga_status": {
"status_data_age": 30,
"status_update_interval": 15,
"reading_status_data_ok": true,
"program_version": "1.9.3",
"icinga_pid": 5954,
"timezone": "UTC",
...
"flap_detection_enabled": false,
"performance_data_being_processed": false
},
"extinfo": {
"host_info": {
"host_name": "shellbox11.infra.hostcomm.ru",
"host_display_name": "shellbox11.infra.hostcomm.ru",
"has_been_checked": true,
"status": "UP",
"state_type": "HARD",
...
"event_handler_enabled": false,
"flap_detection_enabled": false
,
"host_comments": [
],
"host_downtimes": [
] }
}
}
Вытащим объект cgi_json_version:
# cat json.txt | jq '.cgi_json_version'
"1.9.0"
Чтобы распарсить вложенный объект:
# cat json.txt | jq '.icinga_status.program_version'
"1.9.3"
Чтобы извлечь конкретные поля из JSON:
# cat json.txt | jq '.icinga_status | {program_version,icinga_pid}'
{
"program_version": "1.9.3",
"icinga_pid": 5954
}